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

MarkLogic server side API, Javascript, cts.search, search only in specific nodes

在 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 there is no expression parameter as with the XQuery API. To search for words within a specific element and its text descendants, you can use a cts.elementWordQuery 的 JavaScript 版本中。例如,

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

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

与其仅仅依赖根元素作为文档类型标识符,我建议使用集合来管理类似类型的文档组。如果您管理的 JSON 文档尤其如此,这些文档通常没有“根元素”的概念。

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