Почему я не могу сделать запрос по геолокации в упругом поиске?
Итак, я экспериментирую с ElasticSearch, и это то, что я сделал.
1) Добавлено отображение geo_point в моем индексе под названием "тест"
curl -XPOST localhost:9200/test -d '{
"mappings" : {
"type1" : {
"_source" : { "enabled" : false },
"properties" : {
"location" : { "type" : "geo_point", "index" : "not_analyzed" }
}
}
}
}'
2) Индексируется тестируемый документ:
curl -XPUT 'localhost:9200/test/type1/1?pretty' -d '{
"location" : {
"lat" : 74,
"lon" : 90
}
}'
3) Затем написал запрос по геолокации фильтра так:
curl -XPOST 'localhost:9200/test2/_search?pretty' -d '{
"filtered" : {
"query" : {
"match_all" : {}
},
"filter" : {
"geo_distance" : {
"distance" : "200km",
"location" : {
"lat" : 40,
"lon" : -70
}
}
}
}
}'
За это я получаю:
"error": "SearchPhaseExecutionException [Не удалось выполнить этап [запрос], все сегменты не выполнены; shardFailures {[QpGEHtdcReeYmt8X2tG26g][test2][0]: RemoteTransportException[[Jester][inet[/10.58.91.21:9301]][search/phase/query]]; nested: SearchParseException[[test2][0]: from[-1], размер [-1]: ошибка синтаксического анализа [Не удалось проанализировать источник [na]]]; nested: ElasticsearchParseException [Не удалось получить xcontent от org.elasticsearch.common.bytes.ChannelBufferBytesReference@60d8bc76];
1 ответ
Во-первых, в вашем запросе (т.е. 3-й кусок кода), localhost:9200/test2/_search?pretty
должно быть localhost:9200/test/_search?pretty
то есть вы не запрашиваете правильный индекс.
Тогда ваш запрос просто отсутствует query
ключевое слово (т.е. filtered
должен быть заключен в query
), это должно выглядеть так:
curl -XPOST 'localhost:9200/test/_search?pretty' -d '{
"query": {
"filtered": {
"query": {
"match_all": {}
},
"filter": {
"geo_distance": {
"distance": "200km",
"location": {
"lat": 40,
"lon": -70
}
}
}
}
}
}