Xquery 在具有特定属性的元素中搜索值

Xquery 在具有特定属性的元素中搜索值,xquery,marklogic,Xquery,Marklogic,首先尝试这个简单的xpath——验证它是否工作,以及它是否对您来说性能不够 cts:search(doc(), (some cts query?)) 它应该返回mytype=1和myval text content=“100”的elemZ的myval元素子元素 为了做得更好(使用cts:query),需要那些“可怕的”其他cts:query,可能还需要一些范围索引。 大致:(未经测试) 建议您从做任何事情的最简单表达式开始,然后逐个添加约束 在您的例子中,可以想象查询优化器会将简单的xpath

首先尝试这个简单的xpath——验证它是否工作,以及它是否对您来说性能不够

cts:search(doc(), (some cts query?))
它应该返回mytype=1和myval text content=“100”的elemZ的myval元素子元素

为了做得更好(使用cts:query),需要那些“可怕的”其他cts:query,可能还需要一些范围索引。 大致:(未经测试)

建议您从做任何事情的最简单表达式开始,然后逐个添加约束


在您的例子中,可以想象查询优化器会将简单的xpath优化为适当的cts查询。值得尝试和衡量绩效。我个人喜欢从一个基本的xpath开始,然后根据需要进行cts:查询

首先尝试这个简单的xpath——验证它是否有效,以及它的性能是否不足以满足您的需要

cts:search(doc(), (some cts query?))
它应该返回mytype=1和myval text content=“100”的elemZ的myval元素子元素

为了做得更好(使用cts:query),需要那些“可怕的”其他cts:query,可能还需要一些范围索引。 大致:(未经测试)

建议您从做任何事情的最简单表达式开始,然后逐个添加约束

在您的例子中,可以想象查询优化器会将简单的xpath优化为适当的cts查询。值得尝试和衡量绩效。我个人喜欢从一个基本的xpath开始,然后根据需要进行cts:查询

//elemZ[@mytype=1]/myval[. = "100" ]
   search(doc(),
     cts:element-query(xs:QName("elemZ"),
       cts:and-query((
         cts:element-attribute-value-query(xs:QName("elemZ"), xs:QName("mytype"), "1"),
         cts:element-value-query(xs:QName("myval"), "100") )) ) )