Załóżmy, że mamy garść dokumentów w indeksie ElasticSearch. Każdy dokumenty ma wiele lokalizacji w tablicy coś takiego:ElasticSearch filtr odległości geograficznej z wieloma lokalizacjami w tablicy - możliwe?
{
"name": "foobar",
"locations": [
{
"lat": 40.708519,
"lon": -74.003212
},
{
"lat": 39.752609,
"lon": -104.998100
},
{
"lat": 51.506321,
"lon": -0.127140
}
]
}
Według ElasticSearch reference guide
filtr
geo_distance
może pracować z wieloma lokalizacjami/wskazuje każdego dokumentu. Gdy jedna lokalizacja/punkt pasuje do filtra, dokument zostanie uwzględniony w filtrze.
Czy możliwe jest utworzenie filtra odległości geograficznej, który sprawdza wszystkie lokalizacje w tablicy?
nie wydają się działać, niestety:
{
"filter": {
"geo_distance": {
"distance": "100 km",
"locations": "40, -105"
}
}
}
rzuca "QueryParsingException[[myIndex] failed to find geo_point field [locations]
" od locations
nie jest pojedynczym geo_point
ale tablicą geo_point
s.
Tak, tam geo_point mapowanie dla lokalizacjach. – Max
To powinno zadziałać, zobacz mój przykład. Którą wersję ES używasz? Przetestowałem to na 0.20.6. – Thorsten
Właściwie to * działa * teraz po zniszczeniu oryginalnego indeksu. Określenie mapowania geo_point, a następnie wstawienie tablicy lokalizacji sprawiło, że moje wcześniejsze mapowanie było zbyt skomplikowane. Wielkie dzięki! – Max