Почему я не могу сделать запрос по геолокации в упругом поиске?

Итак, я экспериментирую с 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
                    }
                }
            }
        }
    }
}
Другие вопросы по тегам