You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Marklogic Search API排除指定元素执行文本搜索

问题描述

现有如下格式的XML文档:

<article>
  <contg>.....</contg>
  <bibliog>.....</bibliog>
  <indexg>.....</indexg>
  <fundg>.....</fundg>
  <citeg>....</citeg>
</article>

需要使用Marklogic Search API执行文本搜索时,仅在<article>下的<contg>、<bibliog>、<indexg>、<fundg>这四个子片段中检索,排除<citeg>及其所有子元素。现有查询代码默认会搜索整个文档,需修改实现该范围限制。

修改方案

通过在搜索选项的additional-query中添加排除条件,结合原有的集合查询,即可实现目标。具体是利用cts:not-query排除<citeg>元素内的所有内容,修改后的完整代码如下:

let $SearchOption := 
<options xmlns="http://marklogic.com/appservices/search">
<term>
  <term-option>case-insensitive</term-option>
  <term-option>diacritic-insensitive</term-option>
  <term-option>whitespace-insensitive</term-option>
  <term-option>punctuation-insensitive</term-option>
  <search-option>unfiltered</search-option>
  <additional-query>
    {
      cts:and-query((
        cts:collection-query("id_unicode"),
        cts:not-query(cts:element-query(xs:QName("citeg"), cts:true-query()))
      ))
    }
  </additional-query>
  <return-query>false</return-query>
  <return-metrics>true</return-metrics>
  <debug>false</debug>                           
</term>
</options>
return
search:search('search text',$SearchOption, 1, 10)

修改说明

  • 原有的cts:collection-query被放入cts:and-query中,与新增的排除条件组合,确保同时满足集合过滤和范围限制。
  • cts:not-query(cts:element-query(xs:QName("citeg"), cts:true-query()))表示排除所有<citeg>元素及其子元素内的内容,cts:true-query()用于匹配该元素下的任意内容。
  • 如果你的XML文档带有自定义命名空间,需要将xs:QName("citeg")替换为带命名空间的QName,例如xs:QName("ns:citeg")(需提前绑定命名空间)。

内容的提问来源于stack exchange,提问作者Ajit V G

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 21:46:09