Единицы запроса эластичного поиска, чтобы получить расстояние от произвольной точки до Geopoint - PullRequest
0 голосов
/ 30 декабря 2018

У меня есть проект django, в котором используется asticsearch 6.5.3 для индексации товаров в магазине с точками GeoPoints.Я пытаюсь запросить этот индекс, а также рассчитать расстояние между произвольной точкой, скажем, местоположение пользователя для каждого из этих результатов.

Я используюasticsearch_dsl, и мой код выглядит примерно так:

search_query = search_query.script_fields(distance={
'script':{
    'inline':"doc['location'].arcDistance(params.lat, params.lon)", 
    'params': {
        'lat':user_loc.lat, 
        'lon':user_loc.lon
        }
    }
})
for result in search_query.execute():
    print(result.distance)

Что дает мне значения, которые выглядят следующим образом:

[123456.456879123]

Но я не уверено его подразделениях.Используя онлайн-калькулятор расстояний в https://www.nhc.noaa.gov/gccalc.shtml,, который дает мне расстояние ~ 123 км, похоже, значение в метрах.

Итак:

1.Где я могу найти некоторые точные ответы о его единицах?

Пожалуйста, укажите мне соответствующую документацию для этих методов.Мне также интересно знать, есть ли способ указать единицы измерения, ожидаемые для результатов в вызове метода.

2.Есть ли лучший способ сделать это в Python?

Ответы [ 2 ]

0 голосов
/ 31 декабря 2018

Единицы измерения - те, которые возвращаются методом arcDistance, предоставляющим значение в вашем сценарии.

Дуговое расстояние (в метрах) этого поля географической точки от предоставленного значения широты / долготы

Безболезненные документы оставляют желать лучшего (в 6.5 нет документов по этому методу).Цитата выше была получена здесь: https://www.elastic.co/guide/en/elasticsearch/reference/2.3/modules-scripting.html

Кроме того, здесь упоминается arcDistance счетчик метров здесь: https://www.elastic.co/guide/en/elasticsearch/reference/5.5/breaking_50_scripting.html

0 голосов
/ 31 декабря 2018

Я не уверен насчет точного API-интерфейса Python, но у Flexiblesearch есть Geo Distance Query: https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-geo-distance-query.html

В: https://github.com/elastic/elasticsearch-dsl-py/issues/398 есть пример использования Python ES API:

MyDocType.search().filter(
'geo_distance', distance='1000m', location={"lat": "40", "lon": "-74"}
)

Запрос 'geo_distance' - это самый простой способ получить расстояние между двумя географическими точками, индексированными дляластиком поиска.Я думаю, что вам не нужно использовать сценарии, чтобы достичь этого.

Относительно единицы расстояния, как вы подозревали, по умолчанию это метры.с: https://www.elastic.co/guide/en/elasticsearch/reference/current/common-options.html#distance-units

Везде, где необходимо указать расстояния (например, параметр расстояния в запросе расстояния Geo), единицей по умолчанию, если ничего не указано, является метр.

...