Marklogic中cts:search和cts:URI之间的不一致性
我有以下两个文件Marklogic中cts:search和cts:URI之间的不一致性,marklogic,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"/>
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: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")))))
返回两个文档的URI
请帮助我理解这种不一致性 过滤。当您运行
cts:search
时,默认情况下,它通过检查从索引解析步骤返回的文档来过滤假阳性结果。但是,cts:uri
只能在未经筛选的情况下运行,因此它总是返回索引解析步骤的所有结果
我怀疑如果您包括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。另请参见-并了解如何为放入数据库的XML编制索引。对于这个特定的查询,启用元素属性值的位置可能会有所帮助,但最好安排XML,使其不依赖于并行属性。例如,将
child[@level=“first”]
更改为child1
,查询就会变得很容易解决。谢谢。我无法想象cts:uri会未经过滤地运行。否则,它就非常清楚了。
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')