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

MarkLogic服务器端API、Javascript、cts.search、仅在特定节点中搜索,marklogic,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'. 我的问题是,是否有可能使用Javascrip

在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实现这样的结果?也就是说,只能在特定的根级别节点上运行word查询(因为数据库承载两种不同的文档类型)


(因为我提到的节点是根节点,所以使用
elementwordquery
似乎不是实现目标的便捷方法)

在的JavaScript版本中,没有与的相同的表达式参数。要搜索特定元素及其文本子体中的单词,可以使用。比如说,

var resultsIterator = cts.search(cts.elementWordQuery(xs.QName('SPEECH'), 'with flowers'));
for(var doc of resultsIterator) {
  // …
}
这将遍历每个文档。要获得包含的
SPEECH
元素,可以在
for…of
循环中使用

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

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

为了澄清这一点,您需要查找具有几个特定根注释之一的文档,并希望这些根节点具有与word查询匹配的direct text()子节点。对的