Я использую ElasticSearch (1.4.0) для выполнения моего поиска.
Мне удалось настроить ElasticSearch, и все работает отлично, за исключением фильтра geo_location.
Всякий раз, когда я использую фильтр geo_location, результаты не возвращаются. Обратите внимание, что ElasticSearch не возвращает никаких ошибок. Просто нет обращений, хотя я убедился, что в моей поисковой точке есть объекты рядом.
Это упрощенная версия моего массива PHP params, который я использую для тестирования фильтра geo_distance:
$searchParams['index'] = 'myname';
$searchParams['type'] = 'myentity';
$searchParams['body']['query']['filtered']['filter']['geo_distance'] =
[
'distance' => '50km',
'address.geopoint' => $lat . "," $lng
];
И это тело запроса curl, которое также не возвращает никаких ударов:
{
"query" : {
"filtered" : {
"filter" : {
"geo_distance" : {
"distance" : "50km",
"address.geopoint" : "51.43,-2.54"
}
}
}
}
}
Это мое сопоставление:
{
"myname":{
"mappings":{
"myentity":{
"properties":{
"address":{
"type":"nested",
"properties":{
"country":{
"type":"string"
},
"geopoint":{
"type":"geo_point",
"lat_lon":true
},
"house":{
"type":"string"
},
"postcode":{
"type":"string"
},
"street":{
"type":"string"
},
"town":{
"type":"string"
}
}
},
"categories":{
"type":"string"
},
"tags":{
"type":"string"
}
}
}
}
}
}
Вот документ, который я ожидаю получить как попадание:
[_source] => Array (
[categories] => Array (
)
[tags] => Array (
)
[address] => Array (
[street] => Bristol Road
[geopoint] => 51.4307381,-2.5417914
[town] => Bristol
[house] => 1
[postcode] => BS4 5NL
[country] => UK
)
)
Любая помощь будет оценена.
Согласно документу:
Формат в [lon, lat], обратите внимание, порядок lon/lat здесь, чтобы соответствовать GeoJSON.
Поэтому я думаю, вы должны попробовать:
address.coordinates = [$lng, $lat]
EDIT: ответ после публикации
Поскольку вы разместили свое сопоставление, я вижу вашу реальную проблему сейчас. Поскольку вы используете вложенный тип для address
объекта, вам нужен вложенный запрос, похожий на:
{
"query": {
"nested": {
"path": "address",
"query": {
"filtered": {
"filter": {
"geo_distance": {
"distance": "50km",
"geopoint": "51.43,-2.54"
}
}
}
}
}
}
}
Это либо то, либо прекратить использование вложенного типа (если я не ошибаюсь, он просто удаляет "type":"nested",
из вашего сопоставления). Для этого конкретного случая использования на самом деле не требуется, и ваш оригинал будет работать.
curl
илиmarvel
. Если проблема все еще сохраняется, обновите сообщение своим запросом, ваши данные, которые, по вашему мнению, должны быть возвращены, отображение и версию ES.