cts:search和cts之间的不一致:Marklogic中的uris

时间:2014-09-09 14:35:15

标签: marklogic

我有以下两个文档

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都被退回。

请帮助我理解这种不一致。

1 个答案:

答案 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