我有一个如下所示的“ 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%'
->这有效select * from user where "user_name" LIKE '%,%'
->这不起作用Cassandra中没有任何特殊字符。
我在这里做错了什么?如何在Cassandra中支持特殊字符搜索?
与索引有关系吗?
最佳答案
您正在使用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
关于java - Cassandra中的特殊字符搜索,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49165530/