Marklogic:cts:和查询在同一节点上搜索两个属性

Marklogic:cts:和查询在同一节点上搜索两个属性,marklogic,Marklogic,我想对同一节点中的两个属性执行cts:和查询cts:和query分别在文档中而不是在同一节点中搜索测试条件 是否有方法限制搜索应用于同一节点?将and查询包装在元素查询中,如第二个示例所述: 不必限制直接元素本身,匹配中也包括子元素,但根据您的内容结构,这可能就足够了 如果不是,则使用XPath谓词从搜索结果中过滤出误报。使计算搜索总数等变得更加困难,但至少给出了正确的结果 嗯 根据您的XML结构,您可以使用距离为零的cts:near-query()而不是使用cts:and-query()。我

我想对同一节点中的两个属性执行
cts:和
查询
cts:和query
分别在文档中而不是在同一节点中搜索测试条件


是否有方法限制搜索应用于同一节点?

将and查询包装在元素查询中,如第二个示例所述:

不必限制直接元素本身,匹配中也包括子元素,但根据您的内容结构,这可能就足够了

如果不是,则使用XPath谓词从搜索结果中过滤出误报。使计算搜索总数等变得更加困难,但至少给出了正确的结果


根据您的XML结构,您可以使用距离为零的
cts:near-query()
而不是使用
cts:and-query()。我不久前写了一篇文章,谈到了。简而言之,距离取决于元素中的单词,但不受属性中单词的影响。这应该可以做到:

cts:near-query(
  (cts:element-attribute-value-query($element-qname, $attr1-qname),
   cts:element-attribute-value-query($element-qname, $attr2-qname)),
  0
)
请注意,如果没有将一个元素的属性与另一个元素的属性分隔开来的
元素级
单词,这种方法将不起作用。例如:

<doc>
  <stuff a="1" b="2">some text</stuff>
  <stuff a="3" b="4">some other text</stuff>
</doc>

一些文本
其他一些文本
stuff元素内部的文本在
/doc/stuff\[1\]
的属性和
/doc/stuff\[2\]
的属性之间提供了一定的距离。a和b属性之间没有距离。如果stuff元素没有文本,则
/doc/stuff\[1\]
的属性与
/doc/stuff\[2\]
的属性之间不会有距离