objects elastic elasticsearch

objects - Con la consulta de puntuación de la función Elasticsearch con decaimiento contra un punto geográfico, ¿es posible establecer una distancia objetivo?



elastic nested mapping (1)

Veo algunas maneras de lograr esto:

R. Una forma sería simplemente ordenar por distancia en orden inverso al origen. Utilizaría una consulta geo_distance y luego geo_distance por distancia . En la siguiente consulta, los documentos más distantes aparecerán primero, es decir, el valor de clasificación será la distancia desde el origen y ordenaremos en orden decreciente.

{ "query": { "filtered": { "filter": { "geo_distance": { "from" : "100km", "to" : "200km", "location": { "lat": 10, "lon": 20 } } } } }, "sort": [ { "_geo_distance": { "location": { "lat": 10, "lon": 20 }, "order": "desc", "unit": "km", "distance_type": "plane" } } ] }

B. La segunda forma implica usar una consulta geo_distance_range para definir un "anillo" alrededor del origen. El ancho de ese anillo podría de alguna manera simbolizar la escala de desplazamiento + que usaría en una función de Gauss (aunque no habría decaimiento). Aquí definimos un anillo de 10 km de ancho a 500 km de distancia del punto de origen y ordenamos los documentos por distancia en ese anillo.

{ "query": { "filtered": { "filter": { "geo_distance_range": { "from": "495km", "to": "505km", "location": { "lat": 10, "lon": 20 } } } } }, "sort": [ { "_geo_distance": { "location": { "lat": 10, "lon": 20 }, "order": "desc", "unit": "km", "distance_type": "plane" } } ] }

C. La última forma es un poco más complicado. Básicamente buscamos una forma de "gauss inverso", básicamente esta figura (33) , pero al revés, o esta que representa mejor la forma de rosquilla que buscamos. Podemos combinar la solución B anterior con una función gauss que solo puntuaría dentro de ese anillo. En la siguiente consulta, básicamente estamos diciendo que solo estamos interesados ​​en las ubicaciones a unos 500 km del origen y permitimos que una función de gauss se active solo para esos documentos. Sin embargo, no es perfecto, pero podría estar lo suficientemente cerca de lo que necesita.

{ "query": { "filtered": { "filter": { "geo_distance_range": { "from": "495km", "to": "505km", "location": { "lat": 10, "lon": 20 } } }, "query": { "function_score": { "functions": [ { "gauss": { "location": { "origin": { "lat": 10, "lon": 20 }, "offset": "500km", "scale": "5km" } } } ] } } } }, "sort": { "_score": "desc" } }

No parece posible basado en https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-function-score-query.html , pero me gustaría recibir una confirmación.

En lenguaje sencillo, estoy pidiendo que califique los resultados (con ubicaciones de puntos geográficos) por cuán cerca están de 500 km de algún origen de latitud y longitud.

Es confuso porque hay un parámetro llamado "desplazamiento", pero de acuerdo con la documentación, no parece ser un desplazamiento desde el origen (por ejemplo, la distancia), sino que en su lugar parece significar "umbral".