我开始使用SASI索引并使用以下设置,
CREATE TABLE employee (
id int,
lastname text,
firstname text,
dateofbirth date,
PRIMARY KEY (id, lastname, firstname)
) WITH CLUSTERING ORDER BY (lastname ASC, firstname ASC));
CREATE CUSTOM INDEX employee_firstname_idx ON employee (firstname) USING 'org.apache.cassandra.index.sasi.SASIIndex' WITH OPTIONS = {'mode': 'CONTAINS', 'analyzer_class': 'org.apache.cassandra.index.sasi.analyzer.StandardAnalyzer', 'case_sensitive': 'false'};
我执行以下查询,
SELECT * FROM employee WHERE firstname like '%s';
根据我的研究,它似乎与 Cassandra 中的普通二级索引相同,除了提供 LIKE 搜索,
1)有人可以解释一下它与 Cassandra 中的普通二级索引有何不同吗?
2) 最好的配置是什么,例如模式、analyzer_class 和 case_sensitive - 有相关推荐文档吗?
最佳答案
1) 有人可以解释一下它与 Cassandra 中的普通二级索引有何不同吗?
普通二级索引本质上是另一个由二级索引列和主键组成的查找表。因此它有自己的一组 sstable 文件(磁盘)、memtable(内存)和写入开销(cpu)。
SASI 是 Cassandra 社区开源的一项改进(由 Apple 贡献)。该索引是为每个刷新到磁盘的 SSTable 创建的,并且不维护单独的表。因此,磁盘使用量更少,没有单独的内存表/布隆过滤器/分区索引(内存更少)并且开销最小。
2) 模式、analyzer_class 和 case_sensitive 等最佳配置是什么 - 有相关推荐文档吗?
配置取决于您的用例:-
本质上有三种模式
- PREFIX - 用于根据索引列的前缀提供 LIKE 查询
- CONTAINS - 用于根据索引列中是否存在搜索词来提供 LIKE 查询
- SPARSE - 用于索引稀疏数据(每个术语/列值的匹配键少于 5 个)。例如跨越大时间戳的范围查询。
Analyzer_class:可以指定分析器来分析指定列中的文本。
- NonTokenizingAnalyzer 用于不分析文本但需要大小写标准化或敏感性的情况。
- StandardAnalyzer 用于进行涉及词干提取、大小写标准化、区分大小写、跳过“and”和“the”等常用词以及用于完成分析的语言本地化的分析<
case_sensitive :顾名思义,是否应不区分大小写地搜索索引列。适用的值是
- 正确
- 错误
详细文档引用here以及关于 performance 的详细博客文章.
关于cassandra - Cassandra 中的 SASI 索引以及它与普通索引有何不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48734670/