在cassandra的主键上匹配'like'的模式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在cassandra的主键上匹配'like'的模式相关的知识,希望对你有一定的参考价值。

在Cassandra中,'like'可用于查找满足SASI索引列上搜索模式的匹配结果,它运行得非常好,但如何在主键上使用。

这是我的表:

CREATE TABLE indexxx (
    title VARCHAR,
    PRIMARY KEY (title));

主键上不允许索引,

CREATE CUSTOM INDEX testtt ON indexxx (title) USING 'org.apache.cassandra.index.sasi.SASIIndex' WITH OPTIONS = {'mode': 'CONTAINS', 'analyzer_class': 'org.apache.cassandra.index.sasi.analyzer.StandardAnalyzer', 'case_sensitive': 'false'};



InvalidRequest: Error from server: code=2200 [Invalid query] message="Cannot create secondary index on partition key column title"

当试图使用没有sasi索引时,

select * from indexxx  where title like '%kkk%' ;

InvalidRequest: Error from server: code=2200 [Invalid query] message="LIKE restriction is only supported on properly indexed columns. title LIKE '%kkk%' is not valid." 
答案

在主键的分区列上不可能使用LIKE子句。这是因为分区值始终是哈希值,并且在搜索时仅使用相应的标记。

但是,您可以借助SASI索引在聚类列或任何其他非集合列(未设置,映射或列表)上使用LIKE子句。

另一答案

您可以创建另一个列,该列将包含与title title_sasi相同的值,并在此新列上应用索引。

表结构将是

CREATE TABLE indexxx (
    title VARCHAR,
    title_sasi VARCHAR,
    PRIMARY KEY (title));

指数:

CREATE CUSTOM INDEX testtt ON indexxx (title_sasi) USING 'org.apache.cassandra.index.sasi.SASIIndex' WITH OPTIONS = {'mode': 'CONTAINS', 'analyzer_class': 'org.apache.cassandra.index.sasi.analyzer.StandardAnalyzer', 'case_sensitive': 'false'};

以上是关于在cassandra的主键上匹配'like'的模式的主要内容,如果未能解决你的问题,请参考以下文章

在 Oracle SQL 的主键上声明附加索引时会发生啥?

cassandra中的主键和索引

在 Kafka ksqlDB 上连接两个表时出现错误“无效的连接条件:表-表连接需要在右输入表的主键上连接”

cassandra中的主键是唯一的吗?

Cassandra 简单的主键查询

尝试使用 C# 中的 Guid 作为 Cassandra 中的主键