我在Clusterpoint中有以下数据库:
<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>
</db>我愿意执行查询来搜索特定的名称。通常我会指定:
<query><name>Bill</name></query>但是,这可能会同时匹配英语和俄语名称。
如何确保搜索只查找具有lang="en"属性名称内部
发布于 2015-07-16 16:00:08
可以在请求中将属性定义为子标签,并在搜索、聚合、排序等中使用它们。
如果您想搜索具有特定属性值的,则只需在查询中指定它:
<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。
https://stackoverflow.com/questions/31420148
复制相似问题