我在Elasticsearch的文档中有一个contacts
字段。 contacts
字段中的每个元素都是Object本身。我想在term
字段上使用terms
或contacts
过滤器,以便它与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 结果。这个问题是什么?
感谢您的帮助。
答案 0 :(得分:3)
您使用的映射是什么?如果您使用的是嵌套类型,请尝试使用nested filter。
{
"filter": {
"nested": {
"path": "contacts",
"filter": {
"term": {
"contacts.province_id": 3
}
}
}
}
}