我在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如何有能力存储中文?
谢谢, 哈利
答案 0 :(得分:1)
默认情况下,文本在Cassandra中表示为UTF-8
,如评论中所述。
对于您的问题,主要工作由SASI完成,它从文本列获取数据,并将分析器应用于它 - 在大多数情况下,对于分析器,中文字符就像其他字符一样。虽然如果您打算索引文本列,那么您可能需要查看StandardAnalyzer
。但对于用户名等,NonTokenizingAnalyzer
可能更好。
答案 1 :(得分:1)
理解语言特定字符串的能力来自于“TEXT”数据类型(此处“user_name”列的数据类型)
“UTF-8编码字符串”
在卡桑德拉。如果将“user_name”列存储为“ascii”,那么它只能识别 US-ASCII字符串设置。