2013-01-23 45 views
0

我有以下獲取錯誤的結果與CTS:元素範圍查詢和CTS:元素屬性範圍查詢

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

我已經創建的「元素」元素的範圍索引和屬性範圍的索引XML文件在「屬性」,並試圖下面的查詢來執行:

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) 

))) 

現在,它給了我上述片段的結果,但實際上屬性的「部件1」爲10,大於7,所以accordinly上述片段不該來結果。

請幫忙。

回答

4

該查詢正在做它應該做的。它匹配element = element1和element/@屬性< = 7的片段。這兩種語句對於示例XML都是正確的。它們不適用於該XML中的相同元素,但該查詢不能保證。

這裏的技巧是記住索引指向碎片。一般而言,這意味着整個文檔匹配或不匹配。 http://docs.marklogic.com/guide/search-dev/count_estimate#id_63216涉及此主題,並且http://developer.marklogic.com/blog/fragmented-thoughts也可能有幫助。

獲得您想要的結果可能涉及通過啓用各種位置索引並將您的查詢包裝在cts:element-query中來實現巧妙的做法。或者您可能會重新考慮您的節點名稱,以便它們對於此查詢是片段唯一的。或者你可能會考慮設置一個片段根目錄 - 但我認爲這是最後的手段。