卡桑德拉的中文

时间:2018-03-11 11:04:39

标签: apache cassandra cassandra-3.0 cqlsh

我在Cassandra中使用了中文字母,似乎数据输入正确如下,

SELECT * FROM user;

 user_id | user_name    | user_phone
---------+--------------+-------------
      23 |      uSer23, | 12345678910
       5 |       uSer5^ | 12345678910
      28 |     uSer28名 | 12345678910
      10 |      uSer10- | 12345678910
      16 |      uSer16{ | 12345678910
      13 |      uSer13= | 12345678910
      30 |   uSer30一些 | 12345678910
      11 |      uSer11_ | 12345678910
       1 |       uSer1@ | 12345678910
      19 |      uSer19" | 12345678910
       8 |       uSer8( | 12345678910
       0 |       uSer0! | 12345678910
       2 |       uSer2# | 12345678910
       4 |       uSer4% | 12345678910
      18 |      uSer18[ | 12345678910
      15 |      uSer15} | 12345678910
      22 |      uSer22< | 12345678910
      27 |      uSer27/ | 12345678910
      20 |      uSer20: | 12345678910
       7 |       uSer7* | 12345678910
       6 |       uSer6& | 12345678910
      29 |     uSer29称 | 12345678910
       9 |       uSer9) | 12345678910
      14 |      uSer14| | 12345678910
      26 |      uSer26? | 12345678910
      21 |      uSer21; | 12345678910
      17 |      uSer17] | 12345678910
      31 | uSer31区中文 | 12345678910
      24 |      uSer24> | 12345678910
      25 |      uSer25. | 12345678910
      12 |      uSer12+ | 12345678910
       3 |       uSer3$ | 12345678910

我为'user_name'字段创建了一个索引,如下所示,

CREATE CUSTOM INDEX user_nontoken_idx ON QCS.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'}; 

当我使用这些中文单词进行搜索时,会成功搜索。

SELECT * FROM user WHERE user_name LIKE '%称%';

它是如何实际运作的? Cassandra如何有能力存储中文?

谢谢, 哈利

2 个答案:

答案 0 :(得分:1)

默认情况下,文本在Cassandra中表示为UTF-8,如评论中所述。

对于您的问题,主要工作由SASI完成,它从文本列获取数据,并将分析器应用于它 - 在大多数情况下,对于分析器,中文字符就像其他字符一样。虽然如果您打算索引文本列,那么您可能需要查看StandardAnalyzer。但对于用户名等,NonTokenizingAnalyzer可能更好。

答案 1 :(得分:1)

理解语言特定字符串的能力来自于“TEXT”数据类型(此处“user_name”列的数据类型)

  

“UTF-8编码字符串”

在卡桑德拉。如果将“user_name”列存储为“ascii”,那么它只能识别 US-ASCII字符串设置。