Индексы SASI в Кассандре, похоже, имеют некоторые ошибки
Я только начал работать с индексом SASI на Cassandra 3.7.0 и столкнулся с проблемой, которая, как я подозревал, была ошибкой. Я с трудом отследил ситуацию, в которой появилась ошибка, вот что я нашел:
При запросе с индексом 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) '.
При запросе с заявлением select * from roles2 where b<3;
, rusult состоит из двух строк:
name | a | b
------+---+---
Joe | 1 | 1
Joe | 2 | 2
(2 rows)
Тем не менее, если запрос с select * from roles where b<3;
, он вернул никаких строк:
name | a | b
------+---+---
(0 rows)
Это не единственная ситуация, когда ошибка появляется, когда я однажды создал индекс SASI с определенным именем, например, 'end_idx' в столбце 'end', ошибка появилась, когда я не указал имя индекса, он исчез,
Пожалуйста, помогите мне подтвердить эту ошибку или скажите, правильно ли я использовал индекс SASI.