我有以下两个文档
doc1.xml
<root>
<parent>
<child id="1"/>
<child id="2" level="first"/>
</parent>
</root>
doc2.xml
<root>
<parent>
<child id="2"/>
<child id="1" level="first"/>
</parent>
</root>
当我跑步时:
cts:search(/root,cts:element-query(xs:QName("child"),
cts:and-query((cts:element-attribute-value-query(xs:QName("child"),xs:QName("id"),"1"),
cts:element-attribute-value-query(xs:QName("child"),xs:QName("level"),"first")))))
返回第一份文件。
但是当我跑步时:
cts:uris((),(),cts:element-query(xs:QName("child"),
cts:and-query((cts:element-attribute-value-query(xs:QName("child"),xs:QName("id"),"1"),
cts:element-attribute-value-query(xs:QName("child"),xs:QName("level"),"first")))))
两份文件的uris都被退回。
请帮助我理解这种不一致。
答案 0 :(得分:3)
筛选。运行cts:search
时,默认情况下会通过检查索引解析步骤返回的文档来过滤误报结果。但是,cts:uris
只能运行未过滤,因此它始终会返回索引解析步骤中的所有结果。
我怀疑如果您使用cts:search
选项来运行未经过滤,您的结果将是相同的。
cts:search(/root,
cts:element-query(xs:QName("child"),
cts:and-query((
cts:element-attribute-value-query(xs:QName("child"),xs:QName("id"),"1"),
cts:element-attribute-value-query(xs:QName("child"),xs:QName("level"),"first")))),
'unfiltered')
有关更多详细信息,请参阅MarkLogic的Query Performance and Tuning Guide。