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

时间:2019-04-09 11:13:58

标签: marklogic marklogic-9

当我将搜索结果包装到wrapper元素中时,我正在对搜索结果应用cts:highlight函数,这会引发错误。

[1.0-ml] XDMP-CHILDNODEKIND:让$ SearchOption:=不区分大小写通配符修饰词组变音符号不敏感标点不敏感true let $ search:= search:search(“ multilayers”,$ SearchOption,1,10)return {for $ searchResult in $ search / search:result let $ docUri:= $ searchResult / @ uri return let $ document:= fn:doc($ docUri)return cts:highlight($ document,“ multilayers”,{$ cts:text})}- -元素节点不能有文档节点子节点

下面是代码:

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>

1 个答案:

答案 0 :(得分:0)

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

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

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

HTH!