Cassandra - 如何使用 map<text, uuid> 在 UDT 上执行 Solr 查询
Posted
技术标签:
【中文标题】Cassandra - 如何使用 map<text, uuid> 在 UDT 上执行 Solr 查询【英文标题】:Cassandra - How to execute Solr query on UDT with map<text, uuid> 【发布时间】:2019-02-03 17:00:43 【问题描述】:我有以下数据库结构:
CREATE TYPE udt_category_subcategory
category map<text, uuid>,
subcategory map<text, uuid>
CREATE TABLE fenix
id uuid,
category frozen<udt_category_subcategory>
CREATE SEARCH INDEX ON fenix WITH COLUMNS category;
我需要使用Solr
在Fenix
表的Category
字段中执行搜索,在该字段中我保存了以下数据结构:
"category" :
"Category Name 1" : "d8f00199-7103-476f-9527-f7d4c92d55f5"
,
"subcategory" :
"Subcategory Name 1" : "06cd6a42-4c50-46ed-a97a-1854c50a7e6f"
我正在尝试以下说明:
SELECT * FROM fenix WHERE solr_query = '!tuplecategory.subcategory:06cd6a42-4c50-46ed-a97a-1854c50a7e6f'
显然这个过滤器目前不工作,但是,有什么问题?我需要输入map <text, uuid>
列的“key”字段才能工作吗?这是可能的?这种数据结构对这种类型的搜索有意义吗?
欢迎任何帮助! :)
【问题讨论】:
【参考方案1】:在 DSE 搜索地图中的列用于保存动态字段:
https://docs.datastax.com/en/dse/6.0/cql/cql/cql_using/search_index/addMapField.html
所以你需要像动态字段一样查询它:
SELECT * FROM fenix WHERE solr_query = '!tuplecategory.subcategory_Name_1:06cd6a42-4c50-46ed-a97a-1854c50a7e6f'
请注意,我已从映射键中删除了空格,并使映射键与 dyn 字段前缀的映射字段名称匹配。如果您了解 DSE 搜索中的 dyn 字段,您就会明白。
TL;DR:查询为!tupleudt.dynamicfield:value
【讨论】:
以上是关于Cassandra - 如何使用 map<text, uuid> 在 UDT 上执行 Solr 查询的主要内容,如果未能解决你的问题,请参考以下文章
Collections$UnmodifiableRandomAccessList<E> Cassandra Frozen Map
未找到请求操作的编解码器:[map<varchar, int> <-> java.util.Map];发布 Apache Cassandra
cassandra datastac Codec not found varchar <-> java.util.Map<java.lang.String, java.lang.St