使用 Elassandra 索引 Cassandra
Indexing Cassandra using Elassandra
我正在尝试在本地使用 Elassandra 作为独立实例。使用 bin/cqlsh
我创建了一个键空间并向其添加了一个测试 table。我想在这个 table 到 运行 elasticsearch 查询上创建一个索引,但我不确定如何去做。我找到了 this information,但这只是一个例子,没有真正了解选项或它们的含义。任何人都可以指出正确的方向来索引我的 table 吗?我也尝试过 ElasticSearch 文档,但没有成功。提前致谢。
是的,我承认,Elassandra 文档远非完美,而且对新手来说很难。
让我们创建一个键空间和 table 并插入一些行:
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 table)。
键空间的名称必须在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_collection
,singleton
表示索引字段由 cassandra 标量列支持 - 既不是列表也不是集合。这是强制性的,因为 elasticsearch 字段是多值的。
cql_partition_key
和 cql_primary_key_order
告诉索引使用哪个列来创建 _id
字段。
我正在尝试在本地使用 Elassandra 作为独立实例。使用 bin/cqlsh
我创建了一个键空间并向其添加了一个测试 table。我想在这个 table 到 运行 elasticsearch 查询上创建一个索引,但我不确定如何去做。我找到了 this information,但这只是一个例子,没有真正了解选项或它们的含义。任何人都可以指出正确的方向来索引我的 table 吗?我也尝试过 ElasticSearch 文档,但没有成功。提前致谢。
是的,我承认,Elassandra 文档远非完美,而且对新手来说很难。
让我们创建一个键空间和 table 并插入一些行:
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 table)。
键空间的名称必须在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_collection
,singleton
表示索引字段由 cassandra 标量列支持 - 既不是列表也不是集合。这是强制性的,因为 elasticsearch 字段是多值的。
cql_partition_key
和 cql_primary_key_order
告诉索引使用哪个列来创建 _id
字段。