Я пытаюсь создать соединение ElasticSearch между двумя таблицами, используя поле UUID.
Моя основная таблица выглядит примерно так:
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
}
Есть ли способ обойти эту ошибку?Я не хочу использовать list<text>
для своих UUID.
Обратите внимание, что я протестировал и изменил тип столбца на 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 ИНФОРМАЦИЯ [главная] StorageService.java:618 initServer Cassandraверсия: 3.11.3
2018-12-03 18: 17: 18 556 ИНФОРМАЦИЯ [главная] StorageService.java:619 версия API-интерфейса initServer Thrift: 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 INFO [main] StorageService.java:622 initServer Поддерживаемые версии собственного протокола:3 / v3, 4 / v4, 5 / v5-бета (по умолчанию: 4 / v4)
elassandra-6.2.3.7.tar.gz