AnalyticDB for MySQL支援在建立全文索引時使用實體詞和停用詞改變分詞結果,以擷取更貼近業務實際情境的分詞結果。AnalyticDB for MySQL通過自訂字典實現實體詞和停用詞功能。
前提條件
建立和更新自訂字典時,需要使用者擁有對自訂字典的DDL和DML許可權。
使用自訂字典時,需要執行查詢的使用者擁有詞典的SELECT許可權。
功能說明
自訂字典本身是一張表,讀寫操作與普通表一樣。自訂字典對新寫入的資料即時生效。
使用限制
自訂字典不允許執行DDL變更。
自訂字典不支援UPDATE和TRUNCATE。
使用自訂字典時,必須和全文索引一起使用。
刪除全文索引前,需先刪除自訂字典。
一個叢集僅可以建立一個自訂字典。如果需要建立多個自訂字典,請聯絡支援人員。
一個自訂字典預設最多允許插入1萬條記錄。如果需要調整插入記錄數,請聯絡支援人員。
建立自訂字典
文法
在AnalyticDB for MySQL中建立自訂字典,具體文法如下:
CREATE TABLE [IF NOT EXISTS] table_name (
`value` VARCHAR NOT NULL COMMENT 'column_comment',
`type` VARCHAR NOT NULL [DEFAULT 'main|stop' COMMENT 'column_comment'],
PRIMARY KEY (`value`,`type`)
) COMMENT 'table_comment'
FULLTEXT_DICT = 'Y',
INDEX_ALL = 'Y|N'約束
自訂字典只能有兩個列:value和type。
value和type列都為VARCHAR類型,並且不可為空。
詞典主鍵必須同時包含value和type列。
參數說明
table_name:表名。表名以字母或底線(_)開頭,可包含字母、數字以及底線(_),長度為1到127個字元。
value:用於儲存詞條內容的欄位,欄位名固定為value。
type:用於儲存詞條類型的欄位,欄位名固定為type。取值如下:
實體詞(main):預設值,識別自然語言文本中具有特定意義的實體詞條,添加到自訂字典的實體詞不會被分詞。例如通用領域中地名和機構名等,電商領域如品牌、產品、型號等。
停用詞(stop):從詞條列表中過濾掉不需要的詞條。例如,在SQL審計日誌情境中的
from詞條。重要僅3.1.4.24及之後版本支援停用詞。
請在雲原生資料倉儲AnalyticDB MySQL控制台集群資訊頁面的配寘資訊地區,查看和升級核心版本。
COMMENT:為列或表添加備忘資訊。
FULLTEXT_DICT:關鍵字,標識該表為詞典表,必須指定為
Y。INDEX_ALL:關鍵字,是否為所有列建立INDEX索引。取值如下:
Y:為所有列建立INDEX索引。表引擎為XUANWU時,預設為該值,建議使用預設值。N:只為主鍵建立INDEX索引,其他列不建立INDEX索引。表引擎是XUANWU_V2時,預設為該值,必須顯示指定為Y,否則系統會報錯。說明3.2.2.0以下核心版本,表引擎為XUANWU。
3.2.2.0及以上核心版本,您可以通過使用
SHOW ADB_CONFIG KEY=RC_DDL_ENGINE_REWRITE_XUANWUV2;命令查看RC_DDL_ENGINE_REWRITE_XUANWUV2參數的取值判斷引擎類型:若取值是true,則預設為XUANWU_V2,若取值是false,且您未顯式指定XUANWU_V2的時候,預設為XUANWU。
樣本
建立表名為tbl_dict_name的自訂字典。
CREATE TABLE tbl_dict_name (
`value` VARCHAR NOT NULL COMMENT '實體詞/停用詞值',
`type` VARCHAR NOT NULL [DEFAULT 'main' COMMENT 'main表示實體詞, stop表示停用詞(3.1.4.24及之後版本支援停用詞)'],
PRIMARY KEY (`value`,`type`)
) COMMENT='使用者字典表'
FULLTEXT_DICT = 'Y',
INDEX_ALL = 'Y';更新自訂字典
插入或者刪除自訂字典中的詞條後,詞典會立刻生效。對於新寫入表中的資料,將使用詞典最新的詞條影響分詞。
樣本
插入一個停用詞(stop)類型的詞條
and,樣本如下:INSERT INTO `tbl_dict_name` (`value`, `type`) VALUES ('and', 'stop');刪除一個詞條:
DELETE FROM `tbl_dict_name` WHERE `value` = 'and' AND `type` = 'stop';
使用自訂字典
文法
在CREATE TABLE或ALTER TABLE中添加全文索引時,指定自訂字典。文法如下:
FULLTEXT INDEX idx_name(`column_name`) [ WITH ANALYZER analyzer_name ] [ WITH DICT tbl_dict_name];參數說明
idx_name:全文索引名稱。
column_name:全文索引的列。
WITH ANALYZER analyzer_name:指定分詞器。AnalyticDB for MySQL支援多種分詞器,詳情請參見全文索引的分詞器。
WITH DICT tbl_dict_name:自訂字典。
樣本
對tbl_fulltext_demo表中的資料類型為varchar類型的列content添加全文索引,索引的名稱為fidx_c,且使用內建alinlp分詞器,自訂字典使用預先定義好的詞典表tbl_ext_dict。
ALTER TABLE `tbl_fulltext_demo`
ADD FULLTEXT INDEX fidx_c(`content`)
WITH ANALYZER alinlp
WITH DICT `tbl_ext_dict`;