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

时间:2012-10-17 11:42:23

标签: marklogic

我想为同一节点中的两个属性执行cts:and-querycts:and-query单独在文档中而不是在同一节点中搜索测试条件。

有没有办法限制搜索在同一节点上应用?

2 个答案:

答案 0 :(得分:0)

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

http://docs.marklogic.com/cts:element-query?q=cts:element-query

没有必要限制直接元素本身,匹配中也包含后代,但根据您的内容结构,这可能就足够了。

如果没有,请使用XPath谓词过滤掉搜索结果中的误报。使计数搜索总数等更难,但至少给出正确的结果。

HTH!

答案 1 :(得分:0)

根据您的XML结构,您可以使用距离为零的cts:near-query()而不是使用cts:and-query()来执行此操作。我刚写了一篇文章,谈到near-query distance。简而言之,距离取决于元素内部的单词,但不受属性中单词的影响。这应该可以解决问题:

cts:near-query(
  (cts:element-attribute-value-query($element-qname, $attr1-qname),
   cts:element-attribute-value-query($element-qname, $attr2-qname)),
  0
)

请注意,如果没有element-level个单词将一个元素的属性与另一个元素的属性分开,则此方法将不起作用。例如:

<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\]的属性之间就不会有距离。