全文索引的分詞器
本文介紹AnalyticDB for MySQL提供的內(nèi)置分詞器以及分詞器的使用方法和分詞效果。
分詞器介紹
AnalyticDB for MySQL全文索引功能提供多種內(nèi)置分詞器,包括AliNLP分詞器、IK分詞器、Standard分詞器、Ngram分詞器、Edge_ngram分詞器、Pattern分詞器。您可以根據(jù)不同場(chǎng)景,使用默認(rèn)分詞器或其他內(nèi)置分詞器對(duì)文本分詞。默認(rèn)內(nèi)置分詞器的策略如下:
3.1.4.15版本之前的集群,系統(tǒng)默認(rèn)使用AliNLP分詞器。
3.1.4.15版本及以上版本的集群,系統(tǒng)默認(rèn)使用IK分詞器。
如何查看集群的內(nèi)核版本,請(qǐng)參見如何查看實(shí)例版本信息。
指定分詞器
語法
FULLTEXT INDEX idx_name(`column_name`) [ WITH ANALYZER analyzer_name ] [ WITH DICT tbl_dict_name];
參數(shù)說明
idx_name:全文索引名稱。
column_name:全文索引的列。
WITH ANALYZER analyzer_name:指定分詞器。
WITH DICT tbl_dict_name:指定自定義詞典。AnalyticDB for MySQL支持自定義詞典,詳情請(qǐng)參見全文索引的自定義詞典。
示例
在創(chuàng)建全文索引表時(shí)指定分詞器,示例如下:
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`), // 使用默認(rèn)分詞器
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分詞器是由阿里云與達(dá)摩院自然語言處理平臺(tái)提供的自然語言分詞工具包,支持通過全文詞典使用實(shí)體詞和停用詞。AliNLP分詞器將連續(xù)的自然語言文本,切分成語義合理、完整的詞條序列,支持中文、英文、印度尼西亞語、馬來語、泰語、越南語、法語和西班牙語等語言。
AliNLP配置項(xiàng)
如何查看和修改分詞器的配置,請(qǐng)參見查看和修改分詞器配置。
配置項(xiàng) | 取值說明 |
FULLTEXT_SPLIT_GRANULARITY | 分詞的粒度。默認(rèn)值為2,取值范圍是2~8之間的整數(shù)。 |
FULLTEXT_FILTER_ST_CONVERT_ENABLED | 是否開啟詞干轉(zhuǎn)換。取值:
例如:men經(jīng)過詞干轉(zhuǎn)換后變?yōu)閙an, cars變?yōu)閏ar。 |
FULLTEXT_TOKENIZER_CASE_SENSITIVE | 是否區(qū)分大小寫。取值:
|
分詞效果
默認(rèn)配置的分詞效果如下:
英文文本的分詞效果。
/*+ mode=two_phase*/ SELECT fulltext_alinlp_test('Hello world');
返回結(jié)果:
[hello, , world]
中文文本的分詞效果。
/*+ mode=two_phase*/ SELECT fulltext_alinlp_test('產(chǎn)品和服務(wù)');
返回結(jié)果:
[產(chǎn)品, 和, 服務(wù)]
查看分詞效果時(shí),必須在SQL語句前添加/*+ mode=two_phase*/
,否則SQL語句無法正確執(zhí)行。
IK分詞器
IK分詞器是一個(gè)開源的輕量級(jí)中文分詞工具包,支持通過全文詞典使用實(shí)體詞和停用詞。
IK配置項(xiàng)
如何查看和修改分詞器的配置,請(qǐng)參見查看和修改分詞器配置。
配置項(xiàng) | 取值說明 |
CSTORE_IK_SEGMENTER_USE_SMART_ENABLE | 分詞的粒度。取值:
|
CSTORE_IK_SEGMENTER_LETTER_MIN_LENGTH | 分詞詞條的最小長度。默認(rèn)值為3,取值范圍是2~16之間的整數(shù)。 |
CSTORE_IK_SEGMENTER_LETTER_MAX_LENGTH | 分詞詞條的最大長度。默認(rèn)值為128,取值范圍是2~256之間的整數(shù)。 |
分詞效果
默認(rèn)配置的分詞效果如下:
英文文本的分詞效果。
/*+ mode=two_phase*/ SELECT fulltext_ik_test('Hello world');
返回結(jié)果:
[hello, world, or]
中文文本的分詞效果。
/*+ mode=two_phase*/ SELECT fulltext_ik_test('產(chǎn)品和服務(wù)');
返回結(jié)果:
[產(chǎn)品, 和服, 服務(wù), 服, 務(wù)]
查看分詞效果時(shí),必須在SQL語句前添加/*+ mode=two_phase*/
,否則SQL語句無法正確執(zhí)行。
Standard分詞器
Standard分詞器在對(duì)文本進(jìn)行切分時(shí)遵循不同的規(guī)則,切分英文文本時(shí),先將文本轉(zhuǎn)換為小寫形式并去除停用詞和標(biāo)點(diǎn)符號(hào),然后進(jìn)行切分;切分中文文本時(shí)直接按照單字切分。Standard分詞器支持通過全文詞典使用實(shí)體詞和停用詞。
Standard配置項(xiàng)
如何查看和修改分詞器的配置,請(qǐng)參見查看和修改分詞器配置。
配置 | 取值說明 |
FULLTEXT_MAX_TOKEN_LENGTH | 被分詞文本的最大長度,超出部分不再被分詞。默認(rèn)值為255,取值范圍是1~1048576之間的整數(shù)。 |
分詞效果
默認(rèn)配置的分詞效果如下:
英文文本的分詞效果。
/*+ mode=two_phase*/ SELECT fulltext_standard_test('Hello world');
返回結(jié)果:
[hello, world]
中文文本的分詞效果。
/*+ mode=two_phase*/ SELECT fulltext_standard_test('產(chǎn)品和服務(wù)');
返回結(jié)果:
[產(chǎn), 品, 和, 服, 務(wù)]
查看分詞效果時(shí),必須在SQL語句前添加/*+ mode=two_phase*/
,否則SQL語句無法正確執(zhí)行。
Ngram分詞器
Ngram分詞器根據(jù)配置項(xiàng)FULLTEXT_NGRAM_TOKEN_SIZE的取值切分文本,支持通過全文詞典使用實(shí)體詞和停用詞。使用Ngram分詞器可以提升模糊檢索的查詢效率。
Ngram配置項(xiàng)
如何查看和修改分詞器的配置,請(qǐng)參見查看和修改分詞器配置。
配置 | 取值說明 |
FULLTEXT_NGRAM_TOKEN_SIZE | 文本切分的長度。默認(rèn)值為2,取值范圍是1~8之間的整數(shù)。 例如:對(duì)“產(chǎn)品和服務(wù)”分詞,當(dāng)FULLTEXT_NGRAM_TOKEN_SIZE=1時(shí),分詞為【產(chǎn), 品, 和, 服, 務(wù)】;當(dāng)FFULLTEXT_NGRAM_TOKEN_SIZE=2時(shí),分詞為【產(chǎn)品, 品和, 和服, 服務(wù)】;當(dāng)FULLTEXT_NGRAM_TOKEN_SIZE=3時(shí),分詞為【產(chǎn)品和, 品和服, 和服務(wù)】。 |
分詞效果
默認(rèn)配置的分詞效果如下:
英文文本的分詞效果。
/*+ mode=two_phase*/ SELECT fulltext_ngram_test('Hello world');
返回結(jié)果:
[he, el, ll, lo, o , w, wo, or, rl, ld]
中文文本的分詞效果。
/*+ mode=two_phase*/ SELECT fulltext_ngram_test('產(chǎn)品和服務(wù)');
返回結(jié)果:
[產(chǎn)品, 品和, 和服, 服務(wù)]
查看分詞效果時(shí),必須在SQL語句前添加/*+ mode=two_phase*/
,否則SQL語句無法正確執(zhí)行。
Edge_ngram分詞器
Edge_ngram分詞器使用了與Ngram分詞器一樣的分詞方法。Edge_ngram主要應(yīng)用于前綴分詞和匹配的場(chǎng)景,支持通過全文詞典使用實(shí)體詞和停用詞。
Edge_ngram配置項(xiàng)
如何查看和修改分詞器的配置,請(qǐng)參見查看和修改分詞器配置。
配置 | 取值說明 |
FULLTEXT_MIN_GRAM_SIZE | 前綴切分的最小長度。默認(rèn)值為1,取值范圍是1~8之間的整數(shù)。 |
FULLTEXT_MAX_GRAM_SIZE | 前綴切分的最大長度,取值必須大于前綴切分的最小長度。默認(rèn)值為2,取值范圍是1~16之間的整數(shù)。 |
分詞效果
默認(rèn)配置的分詞效果如下:
英文文本的分詞效果。
/*+ mode=two_phase*/ SELECT fulltext_edge_ngram_test('Hello world');
返回結(jié)果:
[h, he]
中文文本的分詞效果。
/*+ mode=two_phase*/ SELECT fulltext_edge_ngram_test('產(chǎn)品和服務(wù)');
返回結(jié)果:
[產(chǎn), 產(chǎn)品]
查看分詞效果時(shí),必須在SQL語句前添加/*+ mode=two_phase*/
,否則SQL語句無法正確執(zhí)行。
Pattern分詞器
Pattern分詞器按正則表達(dá)式切分文本,不支持通過全文詞典使用實(shí)體詞、停用詞和通過SQL語句查詢分詞效果。
語法
FULLTEXT INDEX fidx_name(`column_name`) WITH ANALYZER pattern_tokenizer("Custom_rule") [ WITH DICT `tbl_dict_name` ];
參數(shù)說明
Custom_rule:正則表達(dá)式。
示例
指定以
-
作為切分文本的規(guī)則,將“商品的用戶價(jià)值-和使用價(jià)值”切分為[商品的用戶價(jià)值,和使用價(jià)值]
。FULLTEXT INDEX fidx_pattern(`content_pattern`) WITH ANALYZER pattern_tokenizer("-");
指定以
/
作為切分文本的規(guī)則,將“商品的/用戶價(jià)值/和/使用價(jià)值”切分為[商品的,用戶價(jià)值,和,使用價(jià)值]
。FULLTEXT INDEX fidx_pattern(`content_pattern`) WITH ANALYZER pattern_tokenizer("/");
Pattern配置項(xiàng)
如何查看和修改分詞器的配置,請(qǐng)參見查看和修改分詞器配置。
配置 | 取值說明 |
FULLTEXT_TOKENIZER_CASE_SENSITIVE | 是否區(qū)分大小寫。取值:
|
查看和修改分詞器配置
AnalyticDB for MySQL支持查看和修改分詞器的配置。
查看配置
使用
show adb_config
查詢配置項(xiàng)。語法
show adb_config key <analyzer_param>;
參數(shù)說明
analyzer_param:配置項(xiàng)名稱。
示例
show adb_config key FULLTEXT_NGRAM_TOKEN_SIZE;
說明show adb_config
命令可以查詢默認(rèn)配置項(xiàng)和修改后的配置項(xiàng)。使用SELECT查詢配置項(xiàng)。
語法
SELECT `key`, `value`, `update_time` FROM INFORMATION_SCHEMA.kepler_meta_configs WHERE key = '<analyzer_param>';
參數(shù)說明
analyzer_param:配置項(xiàng)名稱。
示例
SELECT `key`, `value`, `update_time` FROM INFORMATION_SCHEMA.kepler_meta_configs WHERE key = 'FULLTEXT_NGRAM_TOKEN_SIZE';
說明SELECT語句只能查詢修改后的配置項(xiàng),如果查詢默認(rèn)的配置項(xiàng),查詢結(jié)果為空。
修改配置
語法
set adb_config <analyzer_param>=<value>;
參數(shù)說明
analyzer_param:配置項(xiàng)的名稱。
value:配置項(xiàng)的取值。
示例
set adb_config FULLTEXT_NGRAM_TOKEN_SIZE=3;