Как исправить «Неожиданный символ ...» в журналах сервера Elassandra при выполнении запроса гео-расстояния от клиента - PullRequest
0 голосов
/ 05 июля 2019

Я хочу выполнить запрос о географическом расстоянии для всех документов с полем 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
...