MarkLogic 服务器端 API、Javascript、cts.search、仅在特定节点中搜索

标签 marklogic

在 Marklogic XQuery 服务器端 API 中,可以按以下方式运行 cts.search 方法:

  cts:search(//SPEECH,
    cts:word-query("with flowers"))

  => ... a sequence of 'SPEECH' element ancestors (or self)
     of any node containing the phrase 'with flowers'.

我的问题是,使用Javascript API是否可以实现这样的结果?即,能够仅在特定的根级节点上运行字查询(因为数据库托管几种不同的文档类型)。

(由于我提到的节点将是根节点,因此使用 elementwordquery 似乎不是实现目标的便捷方法)。

最佳答案

cts.search 的 JavaScript 版本中没有与 XQuery API 一样的表达式参数。要搜索特定元素及其文本后代中的单词,您可以使用 cts.elementWordQuery 。例如,

var resultsIterator = cts.search(cts.elementWordQuery(xs.QName('SPEECH'), 'with flowers'));
for(var doc of resultsIterator) {
  // …
}

这会遍历每个文档。要获取包含的 SPEECH 元素,您可以使用 doc.xpath('//SPEECH')for...of 循环中。

我建议使用集合来管理相似类型文档组,而不是仅仅依赖根元素作为文档类型标识符。如果您正在管理 JSON 文档(通常没有“根元素”的概念),则尤其如此。

var resultsIterator = cts.search(cts.andQuery([
  cts.collectionQuery('Speeches'),
  cts.wordQuery('with flowers')
]));
for(var doc of resultsIterator) {
  // …
}

关于MarkLogic 服务器端 API、Javascript、cts.search、仅在特定节点中搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31118336/

相关文章:

apache - 如何使用 Apache 对 Marklogic 集群进行负载平衡

marklogic - 在 Marlogic 中存储 XML 数据的最佳方式

marklogic - MarkLogic 中的同义词搜索

search - 转换 cts :search to search:search 的逻辑

xquery - 通过 XCC 将 XQuery xml 元素作为外部变量传递给 Marklogic

java - MarkLogic:将 Map-Object 从 Java 传递到 XQuery

dynamic - 在 marklogic 中动态排序结果

marklogic - 听起来像是在 marklogic 中搜索

javascript - 分割文档并插入为多个的转换

timeout - Marklogic:XDMP-EXTIME 错误(超出时间限制)