首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >搜索属性

搜索属性
EN

Stack Overflow用户
提问于 2015-07-15 09:45:32
回答 1查看 29关注 0票数 0

我在Clusterpoint中有以下数据库:

代码语言:javascript
复制
<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>

我愿意执行查询来搜索特定的名称。通常我会指定:

代码语言:javascript
复制
<query><name>Bill</name></query>

但是,这可能会同时匹配英语和俄语名称。

如何确保搜索只查找具有lang="en"属性名称内部

EN

回答 1

Stack Overflow用户

发布于 2015-07-16 16:00:08

可以在请求中将属性定义为子标签,并在搜索、聚合、排序等中使用它们。

如果您想搜索具有特定属性值的,则只需在查询中指定它:

代码语言:javascript
复制
<query><name>Bill<lang>en</lang></name></query>

这将搜索两个条件都匹配的文档。例如,如果您的数据库包含文档(我使用id=3添加了文档):

代码语言:javascript
复制
<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的文档。

但是如果你要搜索的话:

代码语言:javascript
复制
<query><name>Bill</name></query>

然后,您将获得两个包含id=2和id=3的文档。

小心,如果有重复的标签,那么有必要通过在策略配置中为适当的标签定义规则"colocate=yes“来使用标签托管(在您的示例中- ),并在查询中使用"@”运算符。

如果将文档添加到数据库中:

代码语言:javascript
复制
<document>
    <id>4</id>
    <name lang="en">Steve</name>
    <name lang="ru">John</name>
</document>

并将尝试返回文档,其中两个条件都与一个重复标记内的值匹配,然后查询:

代码语言:javascript
复制
<query><name>John<lang>en</lang></name></query>

将返回不正确的结果-带有id=1和id=4的文档。

但是通过为定义"colocate=yes“并使用"@”运算符:

代码语言:javascript
复制
<query> @ <name>John<lang>en</lang></name> @ </query>

你会得到一个正确的结果--使用id=1。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31420148

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档