mappings geoshape geolocation elasticsearch

geolocation - geoshape - kibana coordinates



¿Distancia de retorno en los resultados de elasticsearch? (4)

Como ES 1.3 MVEL está deshabilitado por defecto, utilice una consulta como:

GET some-index/_search { "sort": [ { "_geo_distance": { "geo_location": "47.1, 8.1", "order": "asc", "unit": "m" } } ], "query": { "match_all": {} }, "script_fields" : { "distance" : { "lang": "groovy", "params" : { "lat" : 47.1, "lon" : 8.1 }, "script" : "doc[/u0027geo_location/u0027].distanceInKm(lat,lon)" } } }

ver: "lang": "groovy", parte

Mi pregunta es similar a esta.

Simplemente, ¿hay alguna manera de devolver la distancia geográfica cuando NO se ordena con _geo_distance?

Actualización: para aclarar, quiero los resultados en orden aleatorio e incluya la distancia.


Gran respuesta de DrTech ... aquí hay una versión actualizada de Elasticsearch 5.x con lenguaje indolora como script. También agregué "store_fields" para incluir _source en el resultado:

curl -XGET ''http://127.0.0.1:9200/geonames/_search?pretty=1'' -d '' { "stored_fields" : [ "_source" ], "script_fields" : { "distance" : { "script" : { "inline": "doc[''location''].arcDistance(params.lat,params.lon) * 0.001", "lang": "painless", "params": { "lat": 2.27, "lon": 50.3 } } } } }''


Para devolver la distancia así como todos los campos / fuentes predeterminados, también puede hacer esto:

Para evitar que ordene por distancia (principalmente), simplemente ordena por _score (o lo que sea que quieras, los resultados ordenados por) primero.

{ "sort": [ "_score", { "_geo_distance": { "location": { "lat": 40.715, "lon": -73.998 }, "order": "asc", "unit": "km", "distance_type": "plane" } } ] }


Sí, puedes, usando un campo de guión .

Por ejemplo, suponiendo que su documento tenga un campo de punto geográfico llamado location , podría usar lo siguiente:

(tenga en cuenta que /u0027 es solo una comilla simple escapada, por lo que /u0027location/u0027 es realmente ''location'' )

curl -XGET ''http://127.0.0.1:9200/geonames/_search?pretty=1'' -d '' { "script_fields" : { "distance" : { "params" : { "lat" : 2.27, "lon" : 50.3 }, "script" : "doc[/u0027location/u0027].distanceInKm(lat,lon)" } } } '' # [Thu Feb 16 11:20:29 2012] Response: # { # "hits" : { # "hits" : [ # { # "_score" : 1, # "fields" : { # "distance" : 466.844095463887 # }, # "_index" : "geonames_1318324623", # "_id" : "6436641_en", # "_type" : "place" # }, ... etc

Si también desea que se _source campo _source , puede especificarlo de la siguiente manera:

curl -XGET ''http://127.0.0.1:9200/geonames/_search?pretty=1'' -d '' { "fields" : [ "_source" ], "script_fields" : { "distance" : { "params" : { "lat" : 2.27, "lon" : 50.3 }, "script" : "doc[/u0027location/u0027].distanceInKm(lat,lon)" } } } ''