我有一个'user
'表,如下所示,
user_id | user_name | user_phone
---------+-----------+-------------
23 | user, | 12345678910
5 | user^ | 12345678910
10 | user- | 12345678910
16 | user{ | 12345678910
13 | user= | 12345678910
11 | user_ | 12345678910
1 | user@ | 12345678910
19 | user" | 12345678910
8 | user( | 12345678910
0 | user! | 12345678910
2 | user# | 12345678910
4 | user% | 12345678910
18 | user[ | 12345678910
15 | user} | 12345678910
22 | user< | 12345678910
27 | user/ | 12345678910
20 | user: | 12345678910
7 | user* | 12345678910
6 | user& | 12345678910
9 | user) | 12345678910
14 | user| | 12345678910
26 | user? | 12345678910
21 | user; | 12345678910
17 | user] | 12345678910
24 | user> | 12345678910
25 | user. | 12345678910
12 | user+ | 12345678910
3 | user$ | 12345678910
我在“user_name
”字段上做了索引,
CREATE CUSTOM INDEX user_name_idx ON user ("user_name") 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 user where "user_name" LIKE '%u%'
- &gt; 有效
select * from user where "user_name" LIKE '%,%'
- &gt;这无效
没有一个特殊角色在Cassandra工作。
我在这做错了什么?如何在Cassandra中支持特殊字符搜索?
与索引有关吗?
谢谢,
哈利
答案 0 :(得分:1)
您正在使用StandardAnalyzer
删除特殊字符
如果您想保留特殊字符NonTokenizingAnalyzer
示例:
CREATE CUSTOM INDEX user_name_idx
ON user ("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'};
示例输出:
cqlsh:test> SELECT * FROM user WHERE user_name LIKE '%,%';
user_id | user_name | user_phone
---------+-----------+------------
23 | user, | 12345678910