在 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/