假设我们在ElasticSearch索引中有一堆文档 . 每个文档在数组中都有多个位置,如下所示:
{
"name": "foobar",
"locations": [
{
"lat": 40.708519,
"lon": -74.003212
},
{
"lat": 39.752609,
"lon": -104.998100
},
{
"lat": 51.506321,
"lon": -0.127140
}
]
}
根据ElasticSearch reference guide
geo_distance过滤器可以处理每个文档的多个位置/点 . 一旦单个位置/点与过滤器匹配,文档将包含在过滤器中 .
那么,是否可以创建一个地理距离过滤器来检查阵列中的所有位置?
不幸的是,这似乎不起作用:
{
"filter": {
"geo_distance": {
"distance": "100 km",
"locations": "40, -105"
}
}
}
抛出“ QueryParsingException[[myIndex] failed to find geo_point field [locations]
”,因为 locations
不是单个 geo_point
而是 geo_point
的数组 .
2 回答
您是否为文档指定了geo_point mapping?
对于Elasticsearch版本5.1,对于相同的上述索引,查询将如下所示,