是否可以使用集合在 cql 中搜索标签?

问题描述

是否可以在 CQL 表中查询与集合中的特定元素完全匹配的项目。例如,我们可以在下表中搜索 where tag="music" 吗?

create table if not exists example (
        website text,uuid text,message text,tags set<text>,created timestamp,primary key ((site),uuid))

解决方法

可以使用 CONTAINS 运算符搜索集合中的元素(请参阅 documentation)。但是它会很慢,因此收集索引可能会有所帮助(请参阅 docs for syntax),但也不一定是最佳的。更好的解决方案是类似于 DataStax 的存储附加索引,但它们还没有在 OSS Cassandra 中。另一种解决方案可能是集成真正的搜索引擎,例如 Solr(称为 DSE 搜索)或 Elasticsearch(如在 Elassandra 中)。

要考虑的主要事情是分析延迟要求,在某些情况下,最好有一个带有标记作为分区键的单独表,但在这种情况下,您可能会出现数据倾斜,因为没有标签太多,数据分布不均匀。