首页 > 解决方案 > cts:在搜索结果上应用包装元素时突出显示函数抛出错误

问题描述

cts:highlight当我将搜索结果包装在<reuslt>抛出错误的包装器元素中时,我正在对搜索结果应用函数。

[1.0-ml] XDMP-CHILDNODEKIND: 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>

-- 元素节点不能有文档节点子节点

下面是代码:

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>

标签: marklogicmarklogic-9

解决方案


(将评论变成正确答案)

根本原因是您将文档节点提供给 cts:highlight 函数,显然它在您的案例中找到了顶级匹配项。这听起来有点奇怪,但它试图将顶级节点放在一个hilighted-text元素中,但这在 XML 中是不允许的。

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


推荐阅读