Запросить точное совпадение на geo_point - PullRequest
0 голосов
/ 06 июня 2018

У меня есть поле, местоположение, в моем индексе с типом данных geo_point.Теперь я хочу выполнить запрос, который дает мне все документы, которые указали широту и долготу.

Я пытаюсь выполнить запрос, подобный этому -

GET garage/_search
{
    "query":{
      "bool" : {
        "must" : [
          {
            "match" : {
              "garage_type" : {
                "query" : "2 Wheeler",
                "operator" : "OR",
                "prefix_length" : 0,
                "max_expansions" : 50,
                "fuzzy_transpositions" : true,
                "lenient" : false,
                "zero_terms_query" : "NONE",
                "boost" : 1.0
              }
            }
          }
        ],
        "filter" : [
          {
            "geo_shape" : {
              "location" : {
                "shape" : {
                  "type" : "point",
                  "coordinates" : [
                    73.56,
                    93.4
                  ]
                },
                "relation" : "intersects"
              },
              "ignore_unmapped" : false,
              "boost" : 1.0
            }
          }
        ],
        "adjust_pure_negative" : true,
        "boost" : 1.0
      }
    }
}

Но выполнение выше запроса дает мнеследующая ошибка -

{
  "error": {
    "root_cause": [
      {
        "type": "query_shard_exception",
        "reason": "Field [location] is not of type [geo_shape] but of type [geo_point]",
        "index_uuid": "R0rAusMyT4uHVnSedsPWdQ",
        "index": "well"
      }
    ],
    "type": "search_phase_execution_exception",
    "reason": "all shards failed",
    "phase": "query",
    "grouped": true,
    "failed_shards": [
      {
        "shard": 0,
        "index": "garage",
        "node": "TKNxQLqfQl-cadDJkx9Hhw",
        "reason": {
          "type": "query_shard_exception",
          "reason": "Field [location] is not of type [geo_shape] but of type [geo_point]",
          "index_uuid": "R0rAusMyT4uHVnSedsPWdQ",
          "index": "well"
        }
      }
    ]
  },
  "status": 400
}

Что имеет смысл.Но я не могу найти никакой альтернативы этому.Можно ли вообще запросить поле geo_point следующим образом?

1 Ответ

0 голосов
/ 06 июня 2018

Нет, это не так.Вы используете запрос geo_shape в поле geo_point.То, что вы можете сделать, это запрос географической точки расстояния.Это выглядит так:

GET /my_locations/_search
{
    "query": {
        "bool" : {
            "must" : {
                "match_all" : {}
            },
            "filter" : {
                "geo_distance" : {
                    "distance" : "200km",
                    "pin.location" : {
                        "lat" : 40,
                        "lon" : -70
                    }
                }
            }
        }
    }
}

Вы можете изменить расстояние в соответствии с вашим вариантом использования.Вы можете найти больше здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...