#geolocation #geospatial #geo #elasticsearch
#геолокация #геопространственный #гео #elasticsearch
Вопрос:
Когда я ищу свои документы ElasticSearch с помощью nested filter -> and -> geo_distance
, я извлекаю документы, которые находятся слишком далеко (и я не хочу возвращать.) Вы можете увидеть запрос и скриншот результатов ниже (исходные результаты слева и результаты, отфильтрованные вручную, справа).
Вот другая копия запроса:
{
"query":{
"match_all":{
}
},
"filter":{
"and":[
{
"term":{
"PropertySubType":"Single Family"
}
},
{
"term":{
"City":"Los Angeles"
}
},
{
"geo_distance":{
"distance":"2.25miles",
"Location":[
34.111583657,
-118.324646099
]
}
},
{
"range":{
"BedroomsTotal":{
"gte":3
}
}
},
{
"range":{
"BuildingSize":{
"gte":3000
}
}
},
{
"range":{
"YearBuilt":{
"lte":2000
}
}
},
{
"terms":{
"ListingStatus":[
"Active",
"Pending",
"Closed"
]
}
}
]
},
"size":100
}
Комментарии:
1. Я думаю, что проблема лежит где-то за пределами ES. ES не должен возвращать никаких результатов для вашего запроса, потому что 1) Местоположение должно быть в формате [lon, lat] (широта -118 не существует) и 2) если вы не изменили сопоставления индексов, «PropertySubType»: «Single Family» не должен соответствовать никаким записям. Вы использовали стандартный анализатор для PropertySubType, и поэтому это поле не должно содержать термин «Single Family» (вместо этого оно должно содержать два термина: «single» и «family»). Кстати, было бы намного проще помочь вам, если бы вы предоставили скрипт, который воспроизводит вашу проблему, например gist.github.com/1097105
2. Спасибо imotov, оказывается, мне нужно было использовать «плоскость» вместо «дуги». Я также обновил сопоставления для индексов, чтобы некоторые поля были mutli_fields, которые анализируются и не анализируются (например, «PropertySubType»)
Ответ №1:
Добавление параметра «distance_type» и установка для него значения «plane» устранили эту проблему. Смотрите «distance_type» здесь:
http://www.elasticsearch.org/guide/reference/query-dsl/geo-distance-filter.html
Комментарии:
1. В приведенных выше документах говорится, что
plane
тип расстояния быстрее, но обеспечивает меньшую точность. Интересно, почему вы получили бы лучшие вычисления расстояния, используяplane
тип расстояния.