如何在Elasticsearch中过滤内部对象?

时间:2015-05-02 07:07:25

标签: json search filter elasticsearch lucene

我在Elasticsearch的文档中有一个contacts字段。 contacts字段中的每个元素都是Object本身。我想在term字段上使用termscontacts过滤器,以便它与contacts.province_idX的文档相匹配。我已尝试将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 结果。这个问题是什么?

感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

您使用的映射是什么?如果您使用的是嵌套类型,请尝试使用nested filter

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