cts:当包装元素应用于搜索结果时突出显示函数抛出错误

问题描述 投票:0回答:1

我正在应用cts:在搜索结果中突出显示函数,当我将搜索结果包装在包装元素中时,它会抛出错误。

[1.0-ml] XDMP-CHILDNODEKIND:let $ SearchOption:= case-insensitivewildcardedstemmeddiacritic-insensitivepunctuation-insensitivetrue let $ search:= search:search(“multilayers”,$ SearchOption,1,10)return $ for $ searchResult in $ search /搜索:结果让$ docUri:= $ searchResult / @ uri return let $ document:= fn:doc($ docUri)return cts:highlight($ document,“multilayers”,{$ cts:text})} - element nodes不能有文档节点子节点

以下是代码:

xquery版本“1.0-ml”;

import module namespace search = "http://marklogic.com/appservices/search" at "/MarkLogic/appservices/search/search.xqy";

let $SearchOption := <options xmlns="http://marklogic.com/appservices/search">
                            <term>
                                <term-option>case-insensitive</term-option>
                                <term-option>wildcarded</term-option>
                                <term-option>stemmed</term-option>
                                <term-option>diacritic-insensitive</term-option>
                                <term-option>punctuation-insensitive</term-option>
                            </term>
              <debug>true</debug>
                        </options>
let $search := search:search('multilayers',$SearchOption,1,10)
return

       <result>{
          for $searchResult in $search/search:result
          let $docUri := $searchResult/@uri
          return
                (
                     let $document := fn:doc($docUri)
                      return
                      cts:highlight($document, "multilayers", <hilighted-text>{$cts:text}</hilighted-text>)                     
                )

 }</result>
marklogic marklogic-9
1个回答
0
投票

(将评论转化为正确的答案)

根本原因是您正在将文档节点输入到cts:highlight函数中,并且显然它在您的情况下在顶层找到匹配项。这听起来有点奇怪,但它试图将该顶级节点放在hilighted-text元素中,但这在XML中是不允许的。

简单的解决方案是使用$document/node()而不是$document传入根元素而不是文档节点本身。

HTH!

© www.soinside.com 2019 - 2024. All rights reserved.