使用 Elassandra 索引 Cassandra



我正在尝试在本地将Elassandra用作独立实例。使用bin/cqlsh我创建了一个密钥空间,并向其中添加了一个测试表。我想在这个表上创建一个索引来运行弹性搜索查询,但我不确定如何去做。我找到了这些信息,但这只是一个示例,没有真正了解选项或它们的含义。谁能指出我在桌子上索引的正确方向?我也尝试过浏览ElasticSearch文档,但没有运气。提前谢谢。

是的,我承认,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字段。

最新更新