使用范围索引比较来自相同片段的元素值

cal*_*low 5 search marklogic

在我的文档中,有两个元素(<a><b>),其中存在范围索引(相同类型).我想要所有那些<a><b>的值相同的文档.我知道使用cts:element-value-co-occurrences()我可以从每个片段中获取<a><b>的值对并比较这些值.但是,如何返回找到匹配的片段?或者有更简单的方法吗?我想要的只是要使用的范围索引.

grt*_*tjn 3

共现函数返回这两个元素的所有现有(片段内)值组合的列表。如果您只是查找元素 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 每个值,并且可能执行得更快。

哈!