Cassandra-如何使用map <text,uuid =“”>在UDT上执行Solr查询

时间:2018-08-29 01:48:22

标签: solr cassandra datastax

我具有以下数据库结构:

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;

我需要使用CategoryFenix表的Solr字段中执行搜索,在该字段中,我保存了以下数据结构:

{
    "category" : {
        "Category Name 1" : "d8f00199-7103-476f-9527-f7d4c92d55f5"
    },
    "subcategory" : {
        "Subcategory Name 1" : "06cd6a42-4c50-46ed-a97a-1854c50a7e6f"
    }
}

我正在尝试以下说明:

SELECT * FROM fenix WHERE solr_query = '{!tuple}category.subcategory:06cd6a42-4c50-46ed-a97a-1854c50a7e6f'

很明显,该过滤器当前无法使用,但是出了什么问题呢?我需要输入map <text, uuid>列的“键”字段才能工作吗?这是可能的?这种数据结构对这种类型的搜索有意义吗?

欢迎任何帮助! :)

1 个答案:

答案 0 :(得分:1)

DSE搜索地图列中的

用于保存动态字段:

https://docs.datastax.com/en/dse/6.0/cql/cql/cql_using/search_index/addMapField.html

因此,您需要像查询动态字段一样对其进行查询:

SELECT * FROM fenix WHERE solr_query = '{!tuple}category.subcategory_Name_1:06cd6a42-4c50-46ed-a97a-1854c50a7e6f'

请注意,我已从地图键中删除了空格,并使地图键与dyn字段前缀的地图字段名称匹配。如果您在DSE搜索中了解dyn字段,那么您会理解的。

TL; DR:查询为{!tuple}udt.dynamicfield:value