全部產品
Search
文件中心

:全文索引的自訂字典

更新時間:Jul 06, 2024

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`;