全文索引的自定義詞典
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`;