Elasticsearch:通过嵌套数组属性查询文档

时间:2017-05-22 14:43:20

标签: elasticsearch nested-query and-operator

我有这样的文件:

{ 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"
              }
            }
          ]
        }
      }
    }
  }
}

如何撰写此查询?

1 个答案:

答案 0 :(得分:0)

我可以找到一种方法,在我的同事的帮助下为所提到的问题编写查询。它可能不是最佳解决方案,但它的工作原理。

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

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