【问题标题】:Elasticsearch: querying documents by nested Array propertiesElasticsearch:通过嵌套数组属性查询文档
【发布时间】:2017-10-22 06:53:22
【问题描述】:

我有这样的文件:

{ name : "name1",
  age : 30,
  address :[{street : "st1" , no : 10}, 
            {street : "st2", no : 20}, 
            {street : "st3", no : 20}]
}
{ name : "name2",
  age : 31,
  address :[{street : "st2" , no : 10}, 
            {street : "st3", no : 20}, 
            {street : "st10", no : 20}]
}

我想发出查询以查找记录,在它们的地址数组中都是“st1” 并且存在“st2”。此查询应返回上例中的第一个文档。

查找在“st1”和“st2”中都有地址的所有文档。我写了这个查询,它什么都不返回。

 {
  "query": {
    "nested": {
      "path": "address",
      "query": {
        "bool": {
          "must": [
            {
              "term": {
                "address.street": "st1"
              }
            },
            {
              "term": {
                "address.street": "st2"
              }
            }
          ]
        }
      }
    }
  }
}

我该如何编写这个查询?

【问题讨论】:

  • 您当前的解决方案有什么问题?
  • 我正在使用嵌套查询。当我使用例如“必须”时,它什么也没给我。必须[术语:{street:“st1”},术语:{street:“st2”}]。它与每个数组条目进行比较,但我想在数组中找到“st1”和“st2”。
  • 你能把所有的细节都放在你的问题中吗?谢谢!
  • @mydogisbox 我稍微编辑了我的问题,希望现在已经清楚了。
  • @mydogisbox 谢谢 :)

标签: elasticsearch nested-query and-operator


【解决方案1】:

在我的同事的帮助下,我可以找到一种方法来针对提到的问题编写查询。它可能不是最佳解决方案,但它确实有效。

{
  "query": {
    "bool": {
      "must": [
        {
          "query": {
            "nested": {
              "path": "address",
              "query": {
                "term": {
                  "address.street": "st1"
                }
              }
            }
          }
        },
        {
          "query": {
            "nested": {
              "path": "address",
              "query": {
                "term": {
                  "address.street": "st2"
                }
              }
            }
          }
        }
      ]
    }
  }
}

如果您知道更优化的解决方案,请分享。

【讨论】:

    猜你喜欢
    • 2021-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-10
    • 1970-01-01
    • 2012-01-15
    • 1970-01-01
    • 2018-06-22
    相关资源
    最近更新 更多