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