在我的文档中,存在两个元素(和),它们具有(相同类型的)范围索引。我希望所有和的值都相同的文档。我了解使用cts:element-value-co-occurrences()
可以从每个片段中获取和的一对值并比较这些值。但是,如何返回找到匹配项的片段?还是有更简单的方法来做到这一点?我只想利用范围索引。
最佳答案
共生函数返回这两个元素的所有现有(碎片内)值组合的列表。如果仅查找元素a的值等于元素b的值的所有文档,则可以执行以下操作:
for $v in cts:element-values(xs:QName("a"))
return
cts:search(
collection(),
cts:and-query((
cts:element-value-query(xs:Qname("a"), $v),
cts:element-value-query(xs:Qname("b"), $v)
))
)
或者,您可以使用
cts:uris
而不是cts:search
来查找这些文档的数据库uri。添加:
以下评论中的@mblakele是什么意思:
let $query :=
cts:or-query(
for $v in cts:element-values(xs:QName("a"))
return
cts:and-query((
cts:element-value-query(xs:Qname("a"), $v),
cts:element-value-query(xs:Qname("b"), $v)
))
)
return
cts:search(
collection(),
$query
)
这样可以避免您分别执行cts:搜索每个值,并且执行起来可能更快。
HTH!