Да, я признаю, документация 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
.