可以在请求中将属性定义为子标签,并在搜索、聚合、排序等中使用它们。
如果要搜索具有特定属性值的 ,则只需在查询中指定它:
<query><name>Bill<lang>en</lang></name></query>
这将搜索两个条件都匹配的文档。因此,如果您的数据库包含例如文档(我添加了 id=3 的文档):
<db>
<document>
<id>1</id>
<name lang="en">John</name>
<name lang="ru">Джон</name>
</document>
<document>
<id>2</id>
<name lang="en">Bill</name>
<name lang="ru">Билл</name>
</document>
<document>
<id>3</id>
<name lang="it">Bill</name>
<name lang="ru">Билл</name>
</document>
</db>
然后上面提到的查询(具有定义的属性)将返回 id=2 的文档。
但如果你会搜索:
<query><name>Bill</name></query>
然后你会得到两个 id=2 和 id=3 的文档。
请注意,如果有重复的标签,则有必要通过在策略配置中为适当的标签(在您的情况 - )中定义规则“colocate=yes”并使用“@”来使用标签托管查询中的运算符。
如果您将文档添加到数据库中:
<document>
<id>4</id>
<name lang="en">Steve</name>
<name lang="ru">John</name>
</document>
并且会尝试返回两个条件匹配一个重复标签内的值的文档,然后查询:
<query><name>John<lang>en</lang></name></query>
将返回不正确的结果 - id=1 和 id=4 的文档。
但是通过为 定义“colocate=yes”并使用“@”运算符:
<query> @ <name>John<lang>en</lang></name> @ </query>
你会得到正确的 - id=1。