使用Elassandra索引Cassandra

时间:2019-02-07 19:27:42

标签: elassandra

我正在尝试将Elassandra用作本地的独立实例。使用bin/cqlsh创建了一个键空间,并向其中添加了一个测试表。我想在该表上创建一个索引以运行Elasticsearch查询,但是我不确定该怎么做。我找到了this information,但这只是一个示例,没有真正介绍选项或它们的含义。谁能指出我正确的方向以在我的桌子上建立索引?我也尝试过ElasticSearch文档,但没有运气。预先感谢。

1 个答案:

答案 0 :(得分:2)

是的,我承认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字段包含一个正则表达式。与此正则表达式匹配的每个cassandra列都将使用类型推断自动索引。

让我们看看生成的映射:

{
  "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_collectionsingleton表示索引字段由cassandra标量列支持-既不是列表也不是集合。这是强制性的,因为elasticsearch字段是多值的。

cql_partition_keycql_primary_key_order告诉索引用于创建_id字段的列。