Я хочу выполнить запрос о географическом расстоянии для всех документов с полем geo_point 'location' в пределах заданной точки с радиусом.
В настоящее время я запускаю образ докера Elassandra (strapdata / elassandra: 6.2.3.17) и убедился, что мое отображение местоположения - geo_point и т. Д., И успешно установил полезную нагрузку JSON. Затем я посмотрел на сервер и обнаружил, что он выходит из строя при десериализации документов рядом с указанной точкой. Это может быть ошибка ES.
Я создаю свой индекс следующим образом (где prv-elassandra
- это имя моего контейнера)
business=$(cat ./business.json)
docker exec -it prv-elassandra curl -XPUT http://127.0.0.1:9200/business-locations?pretty=true
docker exec -it prv-elassandra curl -XPUT -H 'Content-Type: application/json' -d "$business" http://127.0.0.1:9200/business-locations/_mapping/business?pretty=true
Мое отображение (business.json):
{
"business": {
"properties": {
"businessId": {
"type": "text",
"cql_collection": "singleton",
"cql_primary_key_order": 0,
"cql_partition_key": true
},
"name": {
"type": "text",
"cql_collection": "singleton"
},
"address": {
"type": "text",
"cql_collection": "singleton"
},
"categories": {
"type": "text",
"cql_collection": "list"
},
"city": {
"type": "text",
"cql_collection": "singleton"
},
"state": {
"type": "text",
"cql_collection": "singleton"
},
"postalCode": {
"type": "text",
"cql_collection": "singleton"
},
"location": {
"type": "geo_point",
"cql_collection": "singleton",
"cql_primary_key_order": 1
},
"stars": {
"type": "float",
"cql_collection": "singleton"
},
"reviewCount": {
"type": "integer",
"cql_collection": "singleton"
},
"open": {
"type": "boolean",
"cql_collection": "singleton"
}
}
}
}
Полезная нагрузка моего геопространственного запроса:
{
"query":{
"bool": {
"must": {
"match_all": {}
},
"filter": {
"geo_distance": {
"distance": "1km",
"location": {
"lat": 41,
"lon": -81
}
}
}
}
}
}
Я ожидаю успешных обращений, но получаю ответ от сервера:
{
"error" : {
"root_cause" : [
{
"type" : "json_parse_exception",
"reason" : "Unexpected character ('l' (code 108)): was expecting double-quote to start field name\n at [Source: java.io.StringReader@6017a9d1; line: 1, column: 27]"
}
],
"type" : "search_phase_execution_exception",
"reason" : "all shards failed",
"phase" : "query",
"grouped" : true,
"failed_shards" : [
{
"shard" : 0,
"index" : "business-locations",
"node" : "bb5b0385-8483-4ee0-a210-b7bccd64a800",
"reason" : {
"type" : "json_parse_exception",
"reason" : "Unexpected character ('l' (code 108)): was expecting double-quote to start field name\n at [Source: java.io.StringReader@6017a9d1; line: 1, column: 27]"
}
}
]
},
"status" : 500
}
Трассировка ошибок на стороне сервера при десериализации документа и обнаружении «lon» при десериализации документа, как показано ниже:
org.elasticsearch.search.fetch.FetchPhase.loadStoredFields(FetchPhase.java:496) Fetch failed id=["raLSwWsBUOELtLPW2b4X",{lon=-89.5328812, lat=43.0022166}]
org.codehaus.jackson.JsonParseException: Unexpected character ('l' (code 108)): was expecting double-quote to start field name