Индексирование Кассандры с помощью Elassandra - PullRequest
0 голосов
/ 07 февраля 2019

Я пытаюсь использовать Elassandra в качестве автономного экземпляра локально.Используя bin/cqlsh, я создал пространство ключей и добавил к нему тестовую таблицу.Я хочу создать индекс для этой таблицы для выполнения запросовasticsearch, но я не уверен, как это сделать.Я нашел эту информацию , но это всего лишь один пример, который не рассматривал варианты или их значение.Кто-нибудь может указать мне правильное направление для индексации на моем столе?Я попытался просмотреть документацию ElasticSearch, но безуспешно.Заранее спасибо.

1 Ответ

0 голосов
/ 08 февраля 2019

Да, я признаю, документация Elassandra далека от совершенства и трудна для новичков.

Давайте создадим пространство ключей и таблицу и вставим несколько строк:

CREATE KEYSPACE ks WITH replication = {'class': 'NetworkTopologyStrategy', 'DC1': 1};
CREATE TABLE ks.t (id int PRIMARY KEY, name text);
INSERT INTO ks.t (id, name) VALUES (1, 'foo');
INSERT INTO ks.t (id, name) VALUES (2, 'bar');

NetworkTopologyStrategy обязательноSimpleStrategy не поддерживается.

Отображение всех типов cql на типы ES может быть скучным, поэтому существует опция discover для генерации отображения:

curl -XPUT -H 'Content-Type: application/json' 'http://localhost:9200/myindex' -d '{
    "settings": { "keyspace":"ks" },
    "mappings": {
        "t" : {
            "discover":".*"
        }
    }
}'

Это создает индекс с именем myindex, стип с именем t (таблица cassandra).

Имя пространства ключей должно быть указано в settings.keyspace (так как имя индекса и имя пространства ключей различаются).

discoverполе содержит регулярное выражениеКаждый столбец кассандры, соответствующий этому регулярному выражению, будет проиндексирован автоматически с выводом типа.

Давайте посмотрим на сгенерированное отображение:

{
  "myindex": {
    ...
    "mappings": {
      "t": {
        "properties": {
          "id": {
            "type": "integer",
            "cql_collection": "singleton",
            "cql_partition_key": true,
            "cql_primary_key_order": 0
          },
          "name": {
            "type": "keyword",
            "cql_collection": "singleton"
          }
        }
      }
    },
 ...
}

Здесь есть куча специальных cql_* опций.

Для cql_collection, singleton означает, чтоПоле индекса поддерживается скалярным столбцом Кассандры - ни списком, ни множеством.Это является обязательным, потому что поляasticsearch многозначны.

cql_partition_key и cql_primary_key_order сообщают индексу, какой столбец использовать для создания поля _id.

...