Cassandra 中的中文

Chinese language in Cassandra

我在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怎么有存储中文的能力?

默认情况下,文本在 Cassandra 中表示为评论中提到的 UTF-8

对于你的问题,主要工作是由 SASI 完成的,它从 text 列获取数据,并对它应用分析器——在大多数情况下,对于分析器,汉字就像其他字符一样。尽管如果您计划索引文本列,那么您可能需要查看 StandardAnalyzer。但是对于用户名或类似的东西,NonTokenizingAnalyzer 可能会更好。

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

"UTF-8 encoded string"

在卡桑德拉。将此与如果列 "user_name" 存储为 "ascii" 则它仅理解 US-ASCII 字符串 集。

进行比较