我正在应用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>
(将评论转化为正确的答案)
根本原因是您正在将文档节点输入到cts:highlight函数中,并且显然它在您的情况下在顶层找到匹配项。这听起来有点奇怪,但它试图将该顶级节点放在hilighted-text
元素中,但这在XML中是不允许的。
简单的解决方案是使用$document/node()
而不是$document
传入根元素而不是文档节点本身。
HTH!