Индексный массив геопоинтов в Elasticsearch - PullRequest
1 голос
/ 01 апреля 2020

Ниже приведены мои (выборочные) данные Elasti c, в которых есть ряд географических координат, которые я пытаюсь проиндексировать.

PUT geomap/_doc/1
{
  "geometry": {
    "coordinates": [
      [
        [
          -10.8544921875,
          49.82380908513249
        ],
        [
          -10.8544921875,
          59.478568831926395
        ],
        [
          2.021484375,
          59.478568831926395
        ],
        [
          2.021484375,
          49.82380908513249
        ],
        [
          -10.8544921875,
          49.82380908513249
        ]
      ]
    ]
  }
}

и это отображение эластичного поиска, которое я создал для него.

PUT geomap
{
  "mappings": {
    "properties": {
      "geometry": {
        "properties": {
          "coordinates": { "type": "geo_point" }
        }
      }
    }
  }
}

Когда я попытался вставить данные, это не сработало. Я подозреваю, что это связано с тем, что у меня есть массивы координат массива. Когда я обновил образец набора данных до единого массива координат, он работал (ниже).

PUT geomap/_doc/1
{
  "geometry": {
    "coordinates": [
      [
        -10.8544921875,
        49.82380908513249
      ],
      [
        -10.8544921875,
        59.478568831926395
      ],
      [
        2.021484375,
        59.478568831926395
      ],
      [
        2.021484375,
        49.82380908513249
      ],
      [
        -10.8544921875,
        49.82380908513249
      ]
    ]
  }
}

Я был бы рад узнать, какую ошибку я совершил в своем отображении, которая не позволяет мне сделать это.

1 Ответ

1 голос
/ 01 апреля 2020

Я подозреваю, что ваш do c является многоугольником, поэтому вы хотите использовать geo_shape вместо:

PUT geomap
{
  "mappings": {
    "properties": {
      "geometry": {
        "type": "geo_shape",
        "strategy": "recursive"
      }
    }
  }
}

Обратите внимание на "рекурсивную" стратегию, чтобы поддерживает больше пространственных запросов (по крайней мере, в более новых выпусках ES).

PUT geomap/_doc/1
{
  "geometry": {
    "coordinates": [
      [
        [
          -10.8544921875,
          49.82380908513249
        ],
        [
          -10.8544921875,
          59.478568831926395
        ],
        [
          2.021484375,
          59.478568831926395
        ],
        [
          2.021484375,
          49.82380908513249
        ],
        [
          -10.8544921875,
          49.82380908513249
        ]
      ]
    ],
    "type": "polygon"
  }
}

Обратите внимание, как массив заключен в еще один массив для соответствия стандарту geo json и добавлен атрибут type: polygon.

...