我的表架构是:
CREATE TABLE users
(user_id BIGINT PRIMARY KEY,
user_name text,
email_ text);
我把下面几行插入表格。
INSERT INTO users(user_id, email_, user_name)
VALUES(1, 'abc@test.com', 'ABC');
INSERT INTO users(user_id, email_, user_name)
VALUES(2, 'abc@test.com', 'ZYX ABC');
INSERT INTO users(user_id, email_, user_name)
VALUES(3, 'abc@test.com', 'Test ABC');
INSERT INTO users(user_id, email_, user_name)
VALUES(4, 'abc@test.com', 'C ABC');
用于将数据搜索到 user_name
列中,我创建了一个索引来使用 LIKE
操作员 '%%'
:
CREATE CUSTOM INDEX idx_users_user_name ON users (user_name)
USING 'org.apache.cassandra.index.sasi.SASIIndex'
WITH OPTIONS = {
'mode': 'CONTAINS',
'analyzer_class': 'org.apache.cassandra.index.sasi.analyzer.NonTokenizingAnalyzer',
'case_sensitive': 'false'};
problem:1 when 我正在执行下面的查询,它只返回3条记录,而不是4条。
select *
from users
where user_name like '%ABC%';
problem:2 when 我用下面的查询,它给出了一个错误
ERROR: com.datastax.driver.core.exceptions.InvalidQueryException:
ORDER BY with 2ndary indexes is not supported.
Query =select * from users where user_name like '%ABC%' ORDER BY user_name ASC;
查询:
select *
from users
where user_name like '%ABC%'
ORDER BY user_name ASC;
我的要求是过滤 user_name
与 order by user_name
.
1条答案
按热度按时间yshpjwxd1#
第一个查询使用
cassandra:latest
这就是现在cassandra:3.11.3
. 您可能需要再次检查插入的数据(或者使用您提供的cql语句从头开始重新创建)。第二种方法提供了足够的信息—在cassandra中,通过二级索引进行排序是不可能的。您可能需要对应用程序中的结果集进行排序。
也就是说,我不建议在真正的应用程序中运行此设置。有了一些额外的规模(当你有许多记录),这将是一个自杀的表现明智。我不应该深入太多细节,因为也许你已经了解这一点,所以不是一个wikia/文档网站,所以这里有一个链接。