Запрос ElasticSearch для всех документов с географической точкой, которая пересекает / находится в индексированной гео-форме

У меня есть коллекция geo_shapes, извлеченная из файла формы, который я проиндексировал в ES. У меня также есть большой индекс документов с geo_points. Я пытаюсь выполнить запрос, который возвращает все документы, которые имеют точку в geo_shape, но продолжают возвращать ноль результатов.

Я почти уверен, что сопоставления верны, потому что я могу выполнить запрос определенного lat / long и успешно вернуть geo_shape, в котором он находится. Я также могу выполнить поиск в ограничивающей рамке документов с помощью geo_points и успешно вернуть список документов, которые соответствуют.

Вот отображение для моих geo_shapes:

{
"geometry":{
"properties": { 
"type": "geo_shape", 
"tree":"quadtree"
}
}
}

и это отображение для документов с geo_points:

{
"docs":{
"location":{
"properties":{
"coordinates":{
"type":"geo_point",
"geohash":true
}
}
}
}
}

запрос, который я пытаюсь выполнить:

{"query":
"geo_shape": {
"location": {
"indexed_shape": {
"id": "shape_id",
"type": "locations",
"index": "index_name",
"path": "geometry"
}
}
}

Я выполняю запрос к определенному индексу / типу, который содержит документы с geo_points. Если я запускаю его для всего индекса, возвращается только документ geo_shape.

1 ответ

Решение

Чтобы это работало, местоположения в вашем втором индексе должны быть отображены как geo_shape (тип = Точка), а также (не geo_point), как это:

{
  "locations": {
    "location": {
      "properties": {
        "coordinates": {
          "type": "geo_shape",
          "tree": "quadtree",
          "precision": "1m"
        }
      }
    }
  }
}

Тогда ваш geo_shape запрос, работающий с предварительно проиндексированными фигурами, будет работать как положено

Другие вопросы по тегам