Поиск по географическому местоположению Elasticsearch не возвращает результаты для единицы измерения миль

#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
                }
            }
        }
    }
  }
}