Elasticsearch geo_shape point-search возвращает неправильную геометрию коллекционных документов - PullRequest
1 голос
/ 22 апреля 2020

Elasticsearch версия: 6.5.0

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

Мое отображение схемы индекса:

{
    "fullname": {
        "type": "text"
    },
    "location": {
      "type": "geo_shape"
    }
}

Я создаю это do c, которое содержит три круга по 5 км. (Аргентина, Индия и Лондон)

PUT /location_test/region/doc123456
{
  "fullname": "Argentina, India and London",
  "location": {
    "geometries": [

    {
        "coordinates": [
          -58.4358666,
          -34.5884887
        ],
        "type": "circle",
        "radius": "5.0km"
      },

      {
        "coordinates": [
          72.8457919,
          19.1045692
        ],
        "type": "circle",
        "radius": "5.0km"
      },
      {
        "coordinates": [
          -0.1436263,
          51.5412567
        ],
        "type": "circle",
        "radius": "5.0km"
      }
    ],
    "type": "geometrycollection"
  }
}

Когда я выполняю поиск, для точки в Саутгемптоне (широта = 50,909594, длинная = -1,404098) используется следующий запрос:

GET location_test/_search
{
  "query": {
    "geo_shape": {
      "location": {
        "shape": {
          "type": "point",
          "coordinates": [
            -1.404098,
            50.909594
          ]
        }
      }
    }
  }
}

Но я получил документ doc123456, который не имеет смысла, поскольку Аргентина, Индия и Лондон находятся далеко от Саутгемптона. Он не должен совпадать с запросом и не должен возвращать никакого результата.

Интересно то, что я обновил вышеупомянутый do c, (удалил один из кругов, Аргентина), Теперь do c содержит только круги Индии и Лондона.

Выполнил один и тот же запрос, я не получил правильный результат.

Почему у do c, содержащего эти три круга, есть неправильный результат?

Правильно ли я использую правильное отображение и тип поля "geometrycollection" правильно?

Любые предложения приветствуются.

Большое спасибо.

1 Ответ

0 голосов
/ 22 апреля 2020

Не удалось воспроизвести это с использованием 6.6.0:

PUT location_test
{"mappings":{"region":{"properties":{"fullname":{"type":"text"},"location":{"type":"geo_shape","strategy":"recursive"}}}}}

POST /location_test/region/doc123456
{"fullname":"Argentina, India and London","location":{"geometries":[{"coordinates":[-58.4358666,-34.5884887],"type":"circle","radius":"5.0km"},{"coordinates":[72.8457919,19.1045692],"type":"circle","radius":"5.0km"},{"coordinates":[-0.1436263,51.5412567],"type":"circle","radius":"5.0km"}],"type":"geometrycollection"}}

GET location_test/_search
{
  "query": {
    "geo_shape": {
      "location": {
        "shape": {
          "type": "point",
          "coordinates": [
            -1.404098,
            50.909594
          ]
        }
      }
    }
  }
}

0 хитов - что и следовало ожидать.


Попробуйте запустить GET location_test/_search?explain=true и поделиться ответом.

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