Diciamo che abbiamo un sacco di documenti in un indice ElasticSearch. Ogni documenti ha più sedi in un array, come questo:ElasticSearch filtro di distanza geografico con più posizioni nell'array - possibile?
{
"name": "foobar",
"locations": [
{
"lat": 40.708519,
"lon": -74.003212
},
{
"lat": 39.752609,
"lon": -104.998100
},
{
"lat": 51.506321,
"lon": -0.127140
}
]
}
Secondo il ElasticSearch reference guide
il filtro
geo_distance
può lavorare con più sedi/centri per documento. Una volta che una singola posizione/punto corrisponde al filtro, il documento verrà incluso nel filtro.
Quindi, è possibile creare un filtro di distanza geo che controlla tutte le posizioni nell'array?
Questo non sembra funzionare, purtroppo:
{
"filter": {
"geo_distance": {
"distance": "100 km",
"locations": "40, -105"
}
}
}
tiri "QueryParsingException[[myIndex] failed to find geo_point field [locations]
" poiché locations
non è un singolo geo_point
, ma una serie di geo_point
s.
Sì, c'è la mappatura geo_point per le posizioni. – Max
Quindi dovrebbe funzionare, vedere il mio esempio. Quale versione ES usi? L'ho provato su 0.20.6. – Thorsten
In realtà, * funziona * ora dopo aver eseguito il nuking dell'indice originale. Specificando una mappatura geo_point e quindi inserendo semplicemente una serie di posizioni, il mio mapping precedente era troppo complesso. Molte grazie! – Max