本文介紹AnalyticDB for MySQL提供的內建分詞器以及分詞器的使用方法和分詞效果。
分詞器介紹
AnalyticDB for MySQL全文索引功能提供多種內建分詞器,包括AliNLP分詞器、IK分詞器、Standard分詞器、Ngram分詞器、Edge_ngram分詞器、Pattern分詞器。您可以根據不同情境,使用預設分詞器或其他內建分詞器對文本分詞。預設內建分詞器的策略如下:
3.1.4.15版本之前的叢集,系統預設使用AliNLP分詞器。
3.1.4.15版本及以上版本的叢集,系統預設使用IK分詞器。
如何查看叢集的核心版本,請參見如何查看執行個體版本資訊。
指定分詞器
文法
FULLTEXT INDEX idx_name(`column_name`) [ WITH ANALYZER analyzer_name ] [ WITH DICT tbl_dict_name];
參數說明
idx_name:全文索引名稱。
column_name:全文索引的列。
WITH ANALYZER analyzer_name:指定分詞器。
WITH DICT tbl_dict_name:指定自訂字典。AnalyticDB for MySQL支援自訂字典,詳情請參見全文索引的自訂字典。
樣本
在建立全文索引表時指定分詞器,樣本如下:
CREATE TABLE `tbl_fulltext_demo` (
`id` int,
`content` varchar,
`content_alinlp` varchar,
`content_ik` varchar,
`content_standard` varchar,
`content_ngram` varchar,
`content_edge_ngram` varchar,
FULLTEXT INDEX fidx_c(`content`), // 使用預設分詞器
FULLTEXT INDEX fidx_alinlp(`content_alinlp`) WITH ANALYZER alinlp,
FULLTEXT INDEX fidx_ik(`content_ik`) WITH ANALYZER ik,
FULLTEXT INDEX fidx_standard(`content_standard`) WITH ANALYZER standard,
FULLTEXT INDEX fidx_ngram(`content_ngram`) WITH ANALYZER ngram,
FULLTEXT INDEX fidx_edge_ngram(`content_edge_ngram`) WITH ANALYZER edge_ngram,
PRIMARY KEY (`id`)
) DISTRIBUTED BY HASH(id);
AliNLP分詞器
AliNLP分詞器是由阿里雲與達摩院自然語言處理平台提供的自然語言分詞工具包,支援通過全文詞典使用實體詞和停用詞。AliNLP分詞器將連續的自然語言文本,切分成語義合理、完整的詞條序列,支援中文、英文、印尼語、馬來語、泰語、越南語、法語和西班牙語等語言。
AliNLP配置項
如何查看和修改分詞器的配置,請參見查看和修改分詞器配置。
配置項 | 取值說明 |
FULLTEXT_SPLIT_GRANULARITY | 分詞的粒度。預設值為2,取值範圍是2~8之間的整數。 |
FULLTEXT_FILTER_ST_CONVERT_ENABLED | 是否開啟詞幹轉換。取值:
例如:men經過詞幹轉換後變為man, cars變為car。 |
FULLTEXT_TOKENIZER_CASE_SENSITIVE | 是否區分大小寫。取值:
|
分詞效果
預設配置的分詞效果如下:
英文文本的分詞效果。
/*+ mode=two_phase*/ SELECT fulltext_alinlp_test('Hello world');
返回結果:
[hello, , world]
查看分詞效果時,必須在SQL語句前添加/*+ mode=two_phase*/
,否則SQL語句無法正確執行。
IK分詞器
IK分詞器是一個開源的輕量級中文分詞工具包,支援通過全文詞典使用實體詞和停用詞。
IK配置項
如何查看和修改分詞器的配置,請參見查看和修改分詞器配置。
配置項 | 取值說明 |
CSTORE_IK_SEGMENTER_USE_SMART_ENABLE | 分詞的粒度。取值:
|
CSTORE_IK_SEGMENTER_LETTER_MIN_LENGTH | 分詞詞條的最小長度。預設值為3,取值範圍是2~16之間的整數。 |
CSTORE_IK_SEGMENTER_LETTER_MAX_LENGTH | 分詞詞條的最大長度。預設值為128,取值範圍是2~256之間的整數。 |
分詞效果
預設配置的分詞效果如下:
英文文本的分詞效果。
/*+ mode=two_phase*/ SELECT fulltext_ik_test('Hello world');
返回結果:
[hello, world, or]
查看分詞效果時,必須在SQL語句前添加/*+ mode=two_phase*/
,否則SQL語句無法正確執行。
Standard分詞器
Standard分詞器在對文本進行切分時遵循不同的規則,切分英文文本時,先將文本轉換為小寫形式並去除停用詞和標點符號,然後進行切分;切分中文文本時直接按照單字切分。Standard分詞器支援通過全文詞典使用實體詞和停用詞。
Standard配置項
如何查看和修改分詞器的配置,請參見查看和修改分詞器配置。
配置 | 取值說明 |
FULLTEXT_MAX_TOKEN_LENGTH | 被分詞文本的最大長度,超出部分不再被分詞。預設值為255,取值範圍是1~1048576之間的整數。 |
分詞效果
預設配置的分詞效果如下:
英文文本的分詞效果。
/*+ mode=two_phase*/ SELECT fulltext_standard_test('Hello world');
返回結果:
[hello, world]
查看分詞效果時,必須在SQL語句前添加/*+ mode=two_phase*/
,否則SQL語句無法正確執行。
Ngram分詞器
Ngram分詞器根據配置項FULLTEXT_NGRAM_TOKEN_SIZE的取值切分文本,支援通過全文詞典使用實體詞和停用詞。使用Ngram分詞器可以提升模糊檢索的查詢效率。
Ngram配置項
如何查看和修改分詞器的配置,請參見查看和修改分詞器配置。
配置 | 取值說明 |
FULLTEXT_NGRAM_TOKEN_SIZE | 文本切分的長度。預設值為2,取值範圍是1~8之間的整數。 例如:對“產品和服務”分詞,當FULLTEXT_NGRAM_TOKEN_SIZE=1時,分詞為【產, 品, 和, 服, 務】;當FFULLTEXT_NGRAM_TOKEN_SIZE=2時,分詞為【產品, 品和, 和服, 服務】;當FULLTEXT_NGRAM_TOKEN_SIZE=3時,分詞為【產品和, 品和服, 和服務】。 |
分詞效果
預設配置的分詞效果如下:
英文文本的分詞效果。
/*+ mode=two_phase*/ SELECT fulltext_ngram_test('Hello world');
返回結果:
[he, el, ll, lo, o , w, wo, or, rl, ld]
查看分詞效果時,必須在SQL語句前添加/*+ mode=two_phase*/
,否則SQL語句無法正確執行。
Edge_ngram分詞器
Edge_ngram分詞器使用了與Ngram分詞器一樣的分詞方法。Edge_ngram主要應用於首碼分詞和匹配的情境,支援通過全文詞典使用實體詞和停用詞。
Edge_ngram配置項
如何查看和修改分詞器的配置,請參見查看和修改分詞器配置。
配置 | 取值說明 |
FULLTEXT_MIN_GRAM_SIZE | 首碼切分的最小長度。預設值為1,取值範圍是1~8之間的整數。 |
FULLTEXT_MAX_GRAM_SIZE | 首碼切分的最大長度,取值必須大於首碼切分的最小長度。預設值為2,取值範圍是1~16之間的整數。 |
分詞效果
預設配置的分詞效果如下:
英文文本的分詞效果。
/*+ mode=two_phase*/ SELECT fulltext_edge_ngram_test('Hello world');
返回結果:
[h, he]
查看分詞效果時,必須在SQL語句前添加/*+ mode=two_phase*/
,否則SQL語句無法正確執行。
Pattern分詞器
Pattern分詞器按Regex切分文本,不支援通過全文詞典使用實體詞、停用詞和通過SQL語句查詢分詞效果。
文法
FULLTEXT INDEX fidx_name(`column_name`) WITH ANALYZER pattern_tokenizer("Custom_rule") [ WITH DICT `tbl_dict_name` ];
參數說明
Custom_rule:Regex。
樣本
指定以
-
作為切分文本的規則,將“商品的使用者價值-和使用價值”"hello-world"切分為[商品的使用者價值,和使用價值]
[hello, world]
。FULLTEXT INDEX fidx_pattern(`content_pattern`) WITH ANALYZER pattern_tokenizer("-");
指定以
/
作為切分文本的規則,將“商品的/使用者價值/和/使用價值”"he/llo/wo/rld"切分為[商品的,使用者價值,和,使用價值]
[he, llo, wo, rld]
。FULLTEXT INDEX fidx_pattern(`content_pattern`) WITH ANALYZER pattern_tokenizer("/");
Pattern配置項
如何查看和修改分詞器的配置,請參見查看和修改分詞器配置。
配置 | 取值說明 |
FULLTEXT_TOKENIZER_CASE_SENSITIVE | 是否區分大小寫。取值:
|
查看和修改分詞器配置
AnalyticDB for MySQL支援查看和修改分詞器的配置。
查看配置
使用
show adb_config
查詢配置項。文法
show adb_config key <analyzer_param>;
參數說明
analyzer_param:配置項名稱。
樣本
show adb_config key FULLTEXT_NGRAM_TOKEN_SIZE;
說明show adb_config
命令可以查詢預設配置項和修改後的配置項。使用SELECT查詢配置項。
文法
SELECT `key`, `value`, `update_time` FROM INFORMATION_SCHEMA.kepler_meta_configs WHERE key = '<analyzer_param>';
參數說明
analyzer_param:配置項名稱。
樣本
SELECT `key`, `value`, `update_time` FROM INFORMATION_SCHEMA.kepler_meta_configs WHERE key = 'FULLTEXT_NGRAM_TOKEN_SIZE';
說明SELECT語句只能查詢修改後的配置項,如果查詢預設的配置項,查詢結果為空白。
修改配置
文法
set adb_config <analyzer_param>=<value>;
參數說明
analyzer_param:配置項的名稱。
value:配置項的取值。
樣本
set adb_config FULLTEXT_NGRAM_TOKEN_SIZE=3;