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

时间:2014-01-10 10:00:24

标签: search marklogic

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

1 个答案:

答案 0 :(得分:3)

co-occurences函数返回这两个元素的所有现有(片段内)值组合的列表。如果您只是查找元素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来查找这些文档的数据库uris ..

<强>增加:

以下评论中的@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!