全部产品
Search
文档中心

云原生数据仓库AnalyticDB:全文索引的自定义词典

更新时间:Apr 11, 2025

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