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 字符串 集。
进行比较
我在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 字符串 集。
进行比较