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;

我需要使用SolrFenix表的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 &lt;text, uuid&gt; 列的“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

Cassandra 聚合到 Map

卡桑德拉+弹簧数据

用于 TimeUUID 列的 Cassandra Map Reduce