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