我想从满足 cts.Query 的文档中获取一些选定的元素。我在 MarkLogic 上使用 javascript 文档是这样的 -
<a:root xmlns:a = 'some-ns'>
<a:id>some-id</a:id>
<a:some-element1/>
<a:some-element2/>
<a:some-element3/>
.
.
<a:number field='field1'>3</a:number>
<a:number field='field2'>4</a:number>
.
.
</a:root>
我想获取a:number
的a:id
、a:number
元素和field
属性在单个查询中。
我尝试使用 -
cts.valueTuples(
[
cts.elementReference(fn.QName(a, 'id')),
cts.elementAttributeReference(fn.QName(a, 'number'), xs.QName('field')),
cts.elementReference(fn.QName(a, 'number'))
],
[],
cts.andQuery(
[
<query1>,
<query2>
]
)
)
但这为我提供了值元组中 3 个查询的所有结果组合(类似于笛卡尔积)。
怎样才能得到想要的结果?
最佳答案
如果您启用适当的单词位置索引,您可以尝试ordered
选项:
Include co-occurrences only when the value from the first lexicon appears before the value from the second lexicon. Requires that word positions be enabled for both lexicons.
我认为这不会阻止交叉产品,但至少应该减少交叉产品。
不过,执行多次调用 cts.values
和 cts.valueTuples
并没有什么问题。您可以执行三个调用,并请求 uri 值组合(使用 cts.uriReference()
),并使用 uri 在结果之间进行关联。
呵呵!
关于javascript - 在单个查询中选择文档的几个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41893699/