在我的文档中,有两个元素(<a>和<b>),其中存在范围索引(相同类型).我想要所有那些<a>和<b>的值相同的文档.我知道使用cts:element-value-co-occurrences()
我可以从每个片段中获取<a>和<b>的值对并比较这些值.但是,如何返回找到匹配的片段?或者有更简单的方法吗?我想要的只是要使用的范围索引.
共现函数返回这两个元素的所有现有(片段内)值组合的列表。如果您只是查找元素 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)
))
)
Run Code Online (Sandbox Code Playgroud)
或者您可以使用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
)
Run Code Online (Sandbox Code Playgroud)
这使您无需分别执行 cts:search 每个值,并且可能执行得更快。
哈!