【问题标题】:Searching for attributes搜索属性
【发布时间】:2015-07-15 01:45:31
【问题描述】:

我在 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"

【问题讨论】:

    标签: xml database search clusterpoint nosql


    【解决方案1】:

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

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

    <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。

    【讨论】:

    • 这不起作用。添加一个包含 SteveJohn 的文档。如果您将在 Johnen 上进行搜索,您将获得第一个文档和我建议的文档,即使我的 John 的 lang 是“ru” .
    • @Endijs 你是对的,如果一个文档中有重复的标签,这是行不通的,因为这个查询分别在所有文档标签中搜索匹配,而不是在“链接”标签中。为此,您应该使用“标签托管”功能。我刚刚在答案中添加了这个示例(感谢您的参考)。
    • 啊。我也尝试过'@'方法,但之前没有用。现在,在添加适当的策略规则后,它就开始工作了。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-29
    • 2012-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多