如何在 Elasticsearch 中过滤内部对象



我在 Elasticsearch 的文档中有一个contacts字段。 contacts字段中的每个元素本身都是一个对象。我想contacts字段上使用termterms过滤器,以便它匹配contacts.province_id X的文档。我尝试contacts.province_id作为搜索字段,但它不起作用。我应该如何过滤这些类型的字段?

"contacts": 
[
  {
     "id": 1,
     "address": "address1",
     "tel": "40 07 13 22",
     "doctor_id": 1,
     "type_id": 1,
     "lng": "51.374720",
     "lat": "35.781986",
     "city_id": 186,
     "province_id": 8,
     "hour_about": null,
     "place_name": null
  },
  {
     "id": 2,
     "address": "address2",
     "tel": null,
     "doctor_id": 1,
     "type_id": 2,
     "lng": "51.520313",
     "lat": "35.726983",
     "city_id": 186,
     "province_id": 8,
     "hour_about": null,
     "place_name": null
  },
  {
     "id": 3,
     "address": "address3",
     "tel": null,
     "doctor_id": 1,
     "type_id": 2,
     "lng": "51.456368",
     "lat": "35.797505",
     "city_id": 186,
     "province_id": 8,
     "hour_about": null,
     "place_name": null
  }
]

编辑:

我试过这个查询:

GET /index_name/type_name/_search
{
    "query": {
        "filtered": {
            "filter": {
                "term": {
                    "contacts.province_id": 8
                }
            }
        }
    }
}

但它返回 3 个结果,我期望 5 个结果。 问题出在哪里?

感谢您的帮助。

您使用的映射是什么?如果您使用的是嵌套类型,请尝试使用嵌套过滤器。

    {
         "filter": {
                "nested": {
                                "path": "contacts",
                                "filter": {
                                    "term": {
                                        "contacts.province_id": 3
                                    }
                                }
                            }
                        }
                   }

最新更新