spring data Cassandra LIKE查询二级索引簇列

vwoqyblh  于 12个月前  发布在  Cassandra
关注(0)|答案(1)|浏览(130)

Java版本:

openjdk version "20" 2023-03-21
OpenJDK Runtime Environment (build 20+37)
OpenJDK 64-Bit Server VM (build 20+37, mixed mode, sharing)

Springboot版本:3.0.1 Cassandra版本:

cqlsh:hipi> SHOW version;
[cqlsh 6.0.0 | Cassandra 4.0.7 | CQL spec 3.4.5 | Native protocol v5]

表格说明

cqlsh:abc> DESCRIBE TABLE books;

CREATE TABLE abc.books (
    author_id text,
    name text,
    created_at timestamp,
    status boolean,
    PRIMARY KEY (author_id, name)
) WITH CLUSTERING ORDER BY (name ASC)
    AND additional_write_policy = '99p'
    AND bloom_filter_fp_chance = 0.01
    AND caching = {'keys': 'ALL', 'rows_per_partition': 'NONE'}
    AND cdc = false
    AND comment = ''
    AND compaction = {'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy', 'max_threshold': '32', 'min_threshold': '4'}
    AND compression = {'chunk_length_in_kb': '16', 'class': 'org.apache.cassandra.io.compress.LZ4Compressor'}
    AND crc_check_chance = 1.0
    AND default_time_to_live = 0
    AND extensions = {}
    AND gc_grace_seconds = 864000
    AND max_index_interval = 2048
    AND memtable_flush_period_in_ms = 0
    AND min_index_interval = 128
    AND read_repair = 'BLOCKING'
    AND speculative_retry = '99p';

CREATE INDEX books_name_idx ON abc.books (name);

使用WHEN =查询时

SELECT * FROM books WHERE name='8b481c6e-48a0-4552-a624-9e8fbad4f930';

结果

cqlsh:hipi> SELECT * FROM books WHERE name ='8b481c6e-48a0-4552-a624-9e8fbad4f930';
 author_id                            | name                                 | created_at                      | status
--------------------------------------+--------------------------------------+---------------------------------+--------
 a1c08312-d8fe-46f8-b625-bf43da2a2920 | 8b481c6e-48a0-4552-a624-9e8fbad4f930 | 2023-06-13 09:36:07.311000+0000 |   True

但是在使用LIKE时

SELECT * FROM books WHERE name LIKE '%8b4%';

结果

  • InvalidRequest:来自服务器的错误:code = 2200 [Invalid query] message ="LIKE限制仅在正确索引的列上受支持。名称LIKE '%8b4%'无效。"*
vwhgwdsa

vwhgwdsa1#

要在CQL中使用LIKE过滤,需要将索引构建为SSTable Attached Secondary Index(SASI)。SASI索引被认为是“实验性的”,因此默认情况下是禁用的。要启用它们,请在cassandra.yaml中为所有节点翻转此设置,然后重新启动群集:

sasi_indexes_enabled: true

接下来,创建索引,如下所示:

CREATE CUSTOM INDEX books_name_idx ON abc.books (name)
    USING 'org.apache.cassandra.index.sasi.SASIIndex';

然后,这应该工作:

> SELECT * FROM books WHERE name LIKE 'Mastering%';

 author_id | name                           | created_at                      | status
-----------+--------------------------------+---------------------------------+--------
      6866 | Mastering Apache Cassandra 3.x | 2023-06-13 12:51:12.802000+0000 |   True

(1 rows)

相关问题