AnalyticDB MySQL版支援在建立全文索引時使用實體詞和停用詞改變分詞結果,以擷取更貼近業務實際情境的分詞結果。AnalyticDB MySQL版通過自訂字典實現實體詞和停用詞功能。
前提條件
- 建立和更新自訂字典時,需要使用者擁有對自訂字典的DDL和DML許可權。
- 使用自訂字典時,需要執行查詢的使用者擁有詞典的SELECT許可權。
功能說明
自訂字典本身是一張表,讀寫操作與普通表一樣。自訂字典對新寫入的資料即時生效。
使用限制
- 自訂字典不允許執行DDL變更。
- 自訂字典不支援UPDATE和TRUNCATE。
- 使用自訂字典時,必須和全文索引一起使用。
- 刪除全文索引前,需先刪除自訂字典。
- 一個叢集僅可以建立一個自訂字典。如果需要建立多個自訂字典,請聯絡支援人員。
- 一個自訂字典預設最多允許插入1萬條記錄。如果需要調整插入記錄數,請聯絡支援人員。
建立自訂字典
文法
在AnalyticDB MySQL版中建立自訂字典,具體文法如下:
CREATE TABLE tbl_dict_name (
`value` varchar(255) NOT NULL COMMENT '實體詞/停用詞值',
`type` varchar(4) NOT NULL [DEFAULT 'main' COMMENT 'main表示實體詞, stop表示停用詞(3.1.4.24及之後版本支援停用詞)'],
PRIMARY KEY (`value`,`type`)
) COMMENT='使用者字典表'
FULLTEXT_DICT = 'Y';
約束
- 自訂字典只能有兩個欄位:value和type。
- value和type欄位都為varchar類型,並且不可為空。
- 詞典主鍵必須同時包含value和type欄位。
參數說明
- value:具體的詞條內容。
- type:標記詞條類型,支援實體詞(main)和停用詞(stop)。
- 實體詞(main):識別自然語言文本中具有特定意義的實體詞條,添加到自訂字典的實體詞不會被分詞。例如通用領域中地名和機構名等,電商領域如品牌、產品、型號等。
- 停用詞(stop):從詞條列表中過濾掉不需要的詞條。在某些情境,分詞器分詞後獲得的詞條列表中存在需要過濾掉的詞條。例如,在SQL審計日誌情境中的
from
詞條。重要 僅3.1.4.24及之後版本支援停用詞。如何查看版本,請參見如何查看執行個體版本資訊。
- FULLTEXT_DICT:關鍵字,標識該表為詞典表。
更新自訂字典
插入或者刪除自訂字典中的詞條後,詞典會立刻生效。對於新寫入表中的資料,將使用詞典最新的詞條影響分詞。
樣本
- 插入一個停用詞(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 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`;