首页 > 解决方案 > 用于索引数组元素的 Elasticsearch

问题描述

您好我想使用弹性搜索查询从索引中搜索数组元素

{
  "name": "Karan",
  "address": [
                        {
                            "city": "newyork",
                            "zip": 12345
                        },
                        {
                            "city": "mumbai",
                            "zip": 23456
                        }]
}}

当我尝试使用匹配查询进行搜索时,它不起作用

{
    "query": {
      "bool": {
        "must": [
          {
            "match": {
              "address.city": "newyork"
            }
          }
        ]
      }
    }
  }

当我访问像“name”:“Karan”这样的简单字段时,它可以工作,只有数组元素有问题。

标签: elasticsearchnestelasticsearch-2.0

解决方案


因为嵌套对象被索引为单独的隐藏文档,我们不能直接查询它们。相反,我们必须使用嵌套查询来访问它们:

GET /my_index/blogpost/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "title": "eggs" 
          }
        },
        {
          "nested": {
            "path": "comments", 
            "query": {
              "bool": {
                "must": [ 
                  {
                    "match": {
                      "comments.name": "john"
                    }
                  },
                  {
                    "match": {
                      "comments.age": 28
                    }
                  }
                ]
              }
            }
          }
        }
      ]
}}}

查看文档


推荐阅读