Я сохранил несколько документов в Elasticsearch, каждый из которых содержит массив координат, чтобы нарисовать линию на Картах Google. В этих документах я хочу выполнить запрос Geo Bounding Box Query, чтобы узнать, какие из них имеют отношение к тому, где пользователь смотрит на карту. Когда я пытаюсь это сделать, я получаю сообщение об ошибке «Не удалось получить xcontent».Elasticsearch geo_bounding_box не удалось получить xcontent
Это пример того, как один из документов выглядеть (может содержать сотни координат):
{
"type" : "Feature",
"properties" : {
"Type" : "Path",
"Name" : "An example line"
},
"geometry" : {
"type" : "LineString",
"coordinates" : [ [ 14.998659698781326, 59.83282967919488 ], [ 14.998221382378132, 59.832346163020866 ], [ 14.997889000000002, 59.100000001 ], [ 14.997201215918253, 59.83165390720879 ], [ 14.996313, 59.83200200000001 ] ]
}
}
Это запрос, я бег с помощью завитка (благоустроена для удобства чтения, в противном случае в одной строке без пробелов):
curl.exe http://11.11.111.111:9200/map/path/_search?pretty -d'
{
"query": {
"geo_bounding_box": {
"location": {
"top_left": {
"lat": 60.50,
"lon": 14.30
},
"bottom_right": {
"lat": 59.86,
"lon": 16.06
}
}
}
}
}'
Это respone из приведенного выше запроса:
{
"error" : {
"root_cause" : [ {
"type" : "parse_exception",
"reason" : "Failed to derive xcontent"
} ],
"type" : "search_phase_execution_exception",
"reason" : "all shards failed",
"phase" : "query",
"grouped" : true,
"failed_shards" : [ {
"shard" : 0,
"index" : "map",
"node" : "ye2EayFlRFCM6xGWjzcfwQ",
"reason" : {
"type" : "parse_exception",
"reason" : "Failed to derive xcontent"
}
} ]
},
"status" : 400
}
И это журнал нашел в Elasticsearch:
[2016-07-31 10:23:10,268][DEBUG][action.search ] [one] [map][2], node[ye2EayFlRFCM6xGWjzcfwQ], [P], v[2], s[STARTED], a[id=Ptvmzu-2R6WHH89BLifz6g]: Failed to execute [[email protected]] lastShard [true]
RemoteTransportException[[one][10.3.0.4:9300][indices:data/read/search[phase/query]]]; nested: SearchParseException[failed to parse search source [_na_]]; nested: ElasticsearchParseException[Failed to derive xcontent];
Caused by: SearchParseException[failed to parse search source [_na_]]; nested: ElasticsearchParseException[Failed to derive xcontent];
at org.elasticsearch.search.SearchService.parseSource(SearchService.java:855)
at org.elasticsearch.search.SearchService.createContext(SearchService.java:654)
at org.elasticsearch.search.SearchService.createAndPutContext(SearchService.java:620)
at org.elasticsearch.search.SearchService.executeQueryPhase(SearchService.java:371)
at org.elasticsearch.search.action.SearchServiceTransportAction$SearchQueryTransportHandler.messageReceived(SearchServiceTransportAction.java:368)
at org.elasticsearch.search.action.SearchServiceTransportAction$SearchQueryTransportHandler.messageReceived(SearchServiceTransportAction.java:365)
at org.elasticsearch.transport.TransportRequestHandler.messageReceived(TransportRequestHandler.java:33)
at org.elasticsearch.transport.RequestHandlerRegistry.processMessageReceived(RequestHandlerRegistry.java:75)
at org.elasticsearch.transport.TransportService$4.doRun(TransportService.java:376)
at org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:37)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: ElasticsearchParseException[Failed to derive xcontent]
at org.elasticsearch.common.xcontent.XContentFactory.xContent(XContentFactory.java:240)
at org.elasticsearch.search.SearchService.parseSource(SearchService.java:824)
Сам JSON проверяет как correct.Other запросы работают правильно, я могу получить конкретный один за ID и получить все, как хорошо. Только этот запрос дает мне некоторые проблемы.
Я пробовал запрос с использованием фильтров, как на странице documentations, но это тоже не сработало, указав ту же ошибку, что и указанная выше. Я использую Elasticsearch 2.3.1 для Linux.
Что необходимо для выполнения этого запроса? Что означает ошибка «Не удалось получить xcontent» в данном случае и как я могу ее решить?
Не относится к проблеме, с которой вы столкнулись, но 'geo_bounding_box' работает только с точками геометрии, а не с гео-фигурами. – pickypg
В документации говорится: «Фильтр может работать с несколькими местоположениями/точками на документ. После того, как одно место/точка совпадает с фильтром, документ будет включен в фильтр». Линейная линия - это, по сути, куча точек, через которые рисуется линия, или я неправильно интерпретирую? – Motsols
Я считаю, что вы неверно истолковываете. Вы можете иметь массив точек, который отличается от строки. – pickypg