Я сохранил несколько документов в Elasticsearch, каждый из которых содержит массив координат для рисования линии на Google Maps. В этих документах я хочу выполнить запрос 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.83210100000001 ], [ 14.997201215918253, 59.83165390720879 ], [ 14.996313, 59.83200200000001 ] ]
}
}
Это запрос, который я запускаю с помощью curl (украшенный для удобства чтения, в противном случае в одну строку без пробелов):
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
}
}
}
}
}'
Это ответ на приведенный выше запрос:
{
"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 [org.elasticsearch.action.search.SearchRequest@866697a] 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 проверяется как правильный. Другие запросы работают правильно, я могу получить конкретный запрос по идентификатору и также получить все. Только этот запрос доставляет мне некоторые проблемы.
Я пробовал запрос с использованием фильтров, как в documentations, но это тоже не сработало, выдавая ту же ошибку, о которой я упоминал выше. Я использую Elasticsearch 2.3.1 в Linux.
Что нужно, чтобы этот запрос работал? Что означает ошибка «Не удалось получить xcontent» в этом случае и как ее решить?
geo_bounding_box
работает только с геоточками, а не с геофигурами. - person pickypg   schedule 31.07.2016geo_shape
более гибкий геозапрос/фильтр предназначен для использования с типом данныхgeo_shape
. - person pickypg   schedule 01.08.2016