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

时间:2015-06-29 14:29:47

标签: 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似乎不是实现目标的便捷方式)。

1 个答案:

答案 0 :(得分:2)

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

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) {
  // …
}