Картографирование геосоединения

Я не могу сопоставить геопункт с elassandra и драйвером cassandra-express.

геопоинт UDT:

manageESIndex: true, udts: {геопоинт: { lat: 'double', lon: 'double' } }

Кассандра таблицы упругого отображения:

 location: {
      type: 'frozen',
      typeDef: '<geopoint>'
    }
  ...
  es_index_mapping: {
    discover: '.*',
    properties: {
      "location": {
        "type": "geo_point"
      }
    }
  }

Результирующее упругое отображение:

"location": {"type": "nested", "cql_collection": "singleton", "cql_udt_name": "геопункт", "properties": { "lat": { "type": "double", "cql_collection": "singleton" }, "lon": { "type": "double", "cql_collection": "singleton" } } }

Как можно видеть, отображение создает не geo_point, а пару широта / долгота. Это не работает при попытке сделать дистанционный поиск. Кажется, что при использовании 'Discover' свойства отображения игнорируются.

0 ответов

Я столкнулся с похожей проблемой с другим типом / столбцом.

В документации сказано, что при использовании:

discover: '.*'

Он обнаруживает все столбцы, но вы можете переопределить с помощью:

properties: {
  <column-name>: {
    type: '<specific-type>',
    cql_collection: 'singleton'
  }
}

Правда в том, что переопределение на самом деле не происходит. (Пробовал с последней версией 6.2.3.8 Elassandra.)

Я обнаружил, что гораздо проще просто прописать все столбцы и создать свое отображение таким образом, и никогда не использовать discover: ... поле.

Тем не менее, я использую discover: ... один раз, чтобы получить сопоставления по умолчанию и понять, что я должен использовать в моих собственных определениях. Часто, однако, это несколько неправильно, и мне нужно сделать небольшие изменения. Тем не менее, в конце концов, это работало отлично для меня, как только я удалил discover: '.*' линия.

Одна вещь, которая очень важна, это "cql_collection": "singleton", Без этого по умолчанию создается столбец как set<> или же list<> вместо простого int или же textи т. д. В документах говорится, что это происходит потому, что Elasticsearch ожидает данные. Я полагаю, что имея set<> или же list<> собирается сделать вещи намного сложнее и труднее читать / писать. Я думаю, мне нужно проверить, работает ли он лучше или нет с соответствующим тестом производительности...

Вы можете найти реальный пример использования geo_point тип данных с elassandraот сюда

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