我正在尝试使用UUID字段在两个表之间创建ElasticSearch联接。
我的主表如下所示:
CREATE TABLE main_table (
id UUID PRIMARY KEY,
...other fields...
);
子表包括对主表的引用:
CREATE TABLE child_table (
child_id UUID PRIMARY KEY,
main_id UUID,
...other fields...
);
我使用Elassandra构建表和索引,尽管在这里我展示了curl -XPUT ...
命令,因为我也可以用这种方式重现该问题(所以问题不在Elassandra或express-cassandra
中):
curl -XPUT \
-H 'Content-Type: application/json' \
"http://127.0.0.1:9200/my_workspace_main_table/?pretty" \
-d '{
"settings": {
"keyspace": "'my_workspace'",
"index": {
"number_of_shards": 1
}
},
"index": {
"number_of_shards": 1
}
}'
# NOTE: In my script I sleep for a little while here to make sure
# the index is built or I get a 404 Index Not Found error
现在我们有了索引,我们可以使用另一个PUT
构建映射,如下所示:
curl -XPUT \
--max-time 3600 \
-H 'Content-Type: application/json' \
"http://127.0.0.1:9200/my_workspace_main_table/_mapping/main_table/?pretty" \
-d '{
"properties": {
"id": {
"type": "join",
"relations": {
"question": "parent_id"
},
"eager_global_ordinals": true
}
}
}'
在这里,我将类型设置为"join"
,这意味着我无法为列指定"cql_collection": "singleton"
。 因此,我收到一个错误:
{ "error" : { "root_cause" : [ { "type" : "i_o_exception", "reason" : "Existing column [id] type [uuid] mismatch with inferred type [list<text>]" } ], "type" : "i_o_exception", "reason" : "Existing column [id] type [uuid] mismatch with inferred type [list<text>]", "caused_by" : { "type" : "i_o_exception", "reason" : "Existing column [id] type [uuid] mismatch with inferred type [list<text>]" } }, "status" : 500 }
是否有办法绕过此错误?我不想为我的UUID使用list<text>
。
请注意,我已测试并将列类型更改为list<text>
即可完成工作,当我这样做时,将获得以下映射:
{
"my_workspace_t16" : {
"mappings" : {
"my_table" : {
"properties" : {
"id" : {
"type" : "join",
"eager_global_ordinals" : true,
"relations" : {
"question" : "parent_id"
}
}
}
}
}
}
}
如果您知道这种奇怪的推断类型背后的原因(如果您问我,),我将很高兴听到。解释该选择的页面链接非常棒。
我也使用keyword
类型进行了测试,并且可以正常使用以下功能,但是我没有加入,对吗?
curl -XPUT \
--max-time 3600 \
-H 'Content-Type: application/json' \
"http://127.0.0.1:9200/my_workspace_main_table/_mapping/main_table/?pretty" \
-d '{
"properties": {
"id": {
"type": "keyword",
"cql_collection": "singleton"
}
}
}'
重要的版本信息。
2018-12-03 18:17:18,555信息[main] StorageService.java:618 initServer Cassandra版本:3.11.3
2018-12-03 18:17:18,556 INFO [main] StorageService.java:619 initServer Thrift API版本:20.1.0
2018-12-03 18:17:18,561信息[main] StorageService.java:620 initServer CQL支持的版本:3.4.4(默认:3.4.4)
2018-12-03 18:17:18,562信息[main] StorageService.java:622 initServer本机协议支持的版本:3 / v3、4 / v4、5 / v5-beta(默认:4 / v4)
elassandra-6.2.3.7.tar.gz