在Cassandra的特殊字符搜索

时间:2018-03-08 04:40:20

标签: java database apache cassandra cassandra-3.0

我有一个'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中支持特殊字符搜索?

与索引有关吗?

谢谢,
哈利

1 个答案:

答案 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