【问题标题】:Cassandra - How to execute Solr query on UDT with map<text, uuid>Cassandra - 如何使用 map<text, uuid> 在 UDT 上执行 Solr 查询
【发布时间】: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 = '{!tuple}category.subcategory:06cd6a42-4c50-46ed-a97a-1854c50a7e6f'

显然这个过滤器目前不工作,但是,有什么问题?我需要输入map &lt;text, uuid&gt; 列的“key”字段才能工作吗?这是可能的?这种数据结构对这种类型的搜索有意义吗?

欢迎任何帮助! :)

【问题讨论】:

    标签: solr cassandra datastax


    【解决方案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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-11
      • 2017-11-30
      • 2019-05-13
      • 2013-12-24
      • 2016-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多