使用cts获取错误的结果:element-range-query和cts:element-attribute-range-query

时间:2013-01-23 16:06:05

标签: marklogic

我有以下xml文件

<data>
<element attribute="10">element1</element>
<element attribute="7">element2</element>
</data>

我在“element”上创建了元素范围索引,在“attribute”上创建了属性范围索引,并尝试执行以下查询:

cts:search(collection(), cts:and-query((
 cts:element-range-query(xs:QName("element"), "=", "element1")
 cts:element-attribute-range-query(xs:QName("element"), xs:QName("attribute"), "<=", 7)

)))

现在它给我上面的片段作为结果,但实际上“element1”的属性是10大于7,所以上面的片段不应该作为结果。

请帮忙。

1 个答案:

答案 0 :(得分:4)

查询正在做它应该做的事情。它匹配element = element1和element / @ attribute&lt; = 7的片段。这两个语句都适用于示例XML。对于XML中的相同元素,它们不是真的,但查询并不能保证这一点。

这里的技巧是记住索引指向片段。通常,这意味着整个文档匹配或不匹配。 http://docs.marklogic.com/guide/search-dev/count_estimate#id_63216涉及此主题,http://developer.marklogic.com/blog/fragmented-thoughts也可能有所帮助。

获得您想要的结果可能涉及通过启用各种位置索引并将查询包装在cts:element-query中来做一些聪明的事情。或者您可以重新考虑您的节点名称,以便它们对此查询是片段唯一的。或者您可以考虑设置片段根目录 - 但我认为这是最后的手段。