Скажем, у нас есть куча документов в индексе ElasticSearch. Каждый документ имеет несколько местоположений в массиве, например:
{
"name": "foobar",
"locations": [
{
"lat": 40.708519,
"lon": -74.003212
},
{
"lat": 39.752609,
"lon": -104.998100
},
{
"lat": 51.506321,
"lon": -0.127140
}
]
}
В соответствии с справочником ElasticSearch
фильтр
geo_distance
может работать с несколькими местоположениями/точками за документ. Когда одно место/точка совпадает с фильтром, документ будет включен в фильтр.
Итак, возможно ли создать фильтр геоданных, который проверяет все местоположения в массиве?
Это, похоже, не работает, к сожалению:
{
"filter": {
"geo_distance": {
"distance": "100 km",
"locations": "40, -105"
}
}
}
throws "QueryParsingException[[myIndex] failed to find geo_point field [locations]
", поскольку locations
не является одним geo_point
, а массивом geo_point
s.