我试图在本地使用Elassandra作为独立实例。使用bin/cqlsh,我创建了一个键空间,并向其中添加了一个测试表。我想在这个表上创建一个索引来运行elasticsearch查询,但是我不知道如何去做。我找到了这一信息,但这只是一个例子,没有真正了解这些选项或它们的含义。有人能指出我在我的桌子上索引的正确方向吗?我也尝试过查看ElasticSearch文档,但没有取得任何进展。提前谢谢。
发布于 2019-02-08 15:33:51
是的,我承认,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字段包含正则表达式。匹配此regex的每个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标量列支持--既不是列表也不是set。这是强制性的,因为elasticsearch字段是多值的。
cql_partition_key和cql_primary_key_order告诉索引要使用哪个列来创建_id字段。
https://stackoverflow.com/questions/54580854
复制相似问题