#php #search #elasticsearch #geolocation #location-services
#php #Поиск #elasticsearch #геолокация #сервисы определения местоположения
Вопрос:
я использую elasticsearch для возврата бизнеса рядом с местоположением пользователя.
Если я ищу с помощью единицы измерения расстояния в километре ‘km’, я получаю ожидаемые результаты, но если я использую miles ‘m’, он возвращает 0 просмотров
пример запроса km с обращениями
{
"sort" : [
{
"_geo_distance" : {
"location" : {
"lon": -0.11454850000000001,
"lat": 51.4911665
},
"order" : "asc",
"unit" : "km"
}
}
],
"query": {
"filtered" : {
"query" : {
"match_all" : {}
},
"filter" : {
"geo_distance" : {
"distance" : "1km",
"location" : {
"lon": -0.11454850000000001,
"lat": 51.4911665
}
}
}
}
}
}
1 км = 0,6 мили, поэтому этот запрос должен возвращать то же количество результатов, что и выше, но возвращает 0
{
"sort" : [
{
"_geo_distance" : {
"location" : {
"lon": -0.11454850000000001,
"lat": 51.4911665
},
"order" : "asc",
"unit" : "m"
}
}
],
"query": {
"filtered" : {
"query" : {
"match_all" : {}
},
"filter" : {
"geo_distance" : {
"distance" : "1m",
"location" : {
"lon": -0.11454850000000001,
"lat": 51.4911665
}
}
}
}
}
}
Есть идеи, почему это может быть?
Комментарии:
1.
m
это метр, это милиmi
( подробнее о единицах измерения расстояния )2. вы правы, если укажете это в ответе, который я отмечу как принятый
Ответ №1:
Вам просто нужно использовать правильную единицу измерения расстояния: m
для метров, а для миль вам нужно использовать mi
{
"sort" : [
{
"_geo_distance" : {
"location" : {
"lon": -0.11454850000000001,
"lat": 51.4911665
},
"order" : "asc",
"unit" : "mi" <--- here
}
}
],
"query": {
"filtered" : {
"query" : {
"match_all" : {}
},
"filter" : {
"geo_distance" : {
"distance" : "1mi", <--- here
"location" : {
"lon": -0.11454850000000001,
"lat": 51.4911665
}
}
}
}
}
}