【问题标题】:Case sensitivity is not working as expected in Secondary Index in CassandraCassandra 的二级索引中的大小写敏感性未按预期工作
【发布时间】:2018-07-26 23:53:38
【问题描述】:

我在 Cassandra 的某一列中使用了二级索引,

注意:该列也是一个聚类键。

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

我相信 case_sensitive 'false' 是区分大小写的,当我执行以下查询时,我可以看到它尝试匹配确切的大小写(即)它的值是 'TestName' 但是当我尝试执行以下查询它无法检索数据,

Select * from TestPool WHERE "partitionId" =  'partitionId' AND "name" LIKE  '%test%';

以下查询成功,

Select * from TestPool WHERE "partitionId" =  'partitionId' AND "name" LIKE  '%Test%';

有人能说出为什么以及其中有什么问题吗?

【问题讨论】:

    标签: cassandra cassandra-3.0


    【解决方案1】:

    case_sensitive 不是standardAnalyzer 的有效选项,它适用于NonTokenizingAnalyzer

    Valid StandardAnalyzer Options

    由于值为TestName,因此搜索%Test% 有效。

    默认tokenization_normalize_lowercasetokenization_normalize_uppercase 为假,因此会进行区分大小写的搜索。

    【讨论】:

    • standardAnalyzer和NonTokenizingAnalyzer有什么区别
    • NonTokenizingAnalyzer 用于不分析文本但需要大小写规范化或敏感性的情况。 StandardAnalyzer 用于分析,包括词干提取、大小写规范化、区分大小写、跳过“and”和“the”等常用词,以及用于完成分析的语言的本地化。
    猜你喜欢
    • 2010-12-29
    • 2017-02-21
    • 1970-01-01
    • 2019-12-27
    • 1970-01-01
    • 1970-01-01
    • 2013-07-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多