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