3

Cassandra 3.7.0 で SASI インデックスを使い始めたところ、バグだと思われる問題に遭遇しました。バグが発生した状況をほとんど追跡していませんでしたが、次のことがわかりました。

SASI インデックスを使用してクエリを実行すると、誤って 0 行が返される場合があり、少し条件を変更すると、次の CQL コードのように再び機能します。

CREATE TABLE IF NOT EXISTS roles (
    name text,
    a int,
    b int,
    PRIMARY KEY ((name, a), b)
) WITH CLUSTERING ORDER BY (b DESC);

insert into roles (name,a,b) values ('Joe',1,1);
insert into roles (name,a,b) values ('Joe',2,2);
insert into roles (name,a,b) values ('Joe',3,3);
insert into roles (name,a,b) values ('Joe',4,4);

CREATE TABLE IF NOT EXISTS roles2 (
    name text,
    a int,
    b int,
    PRIMARY KEY ((name, a), b)
) WITH CLUSTERING ORDER BY (b ASC);

insert into roles2 (name,a,b) values ('Joe',1,1);
insert into roles2 (name,a,b) values ('Joe',2,2);
insert into roles2 (name,a,b) values ('Joe',3,3);
insert into roles2 (name,a,b) values ('Joe',4,4);

CREATE CUSTOM INDEX ON roles (b) USING 'org.apache.cassandra.index.sasi.SASIIndex' 
WITH OPTIONS = { 'mode': 'SPARSE' };
CREATE CUSTOM INDEX ON roles2 (b) USING 'org.apache.cassandra.index.sasi.SASIIndex' 
WITH OPTIONS = { 'mode': 'SPARSE' };

テーブル ロール 2をテーブルロールの「CLUSTERING ORDER BY (b DESC)」から「CLUSTERING ORDER BY (b ASC) 」に変更しただけであることに注意してください。

statement でクエリを実行するselect * from roles2 where b<3;と、結果は 2 行になります。

 name | a | b
------+---+---
  Joe | 1 | 1
  Joe | 2 | 2

(2 rows)

ただし、 でクエリを実行するとselect * from roles where b<3;、行がまったく返されませんでした。

 name | a | b
------+---+---

(0 rows)

バグが発生するのはこれだけではありません。「end」列に「end_idx」のような特定の名前の SASI インデックスを作成したとき、インデックス名を指定しなかったときにバグが発生しました。 .

このバグを確認するのを手伝ってください。または、SASI インデックスを間違った方法で使用したかどうか教えてください。

4

0 に答える 0