自定义词典

全文检索功能在构建索引和查询时,都需要对文档或待查询语句进行分词,分词结果直接影响索引构建及查询结果。AliNLP在大部分场景下可以得到理想的分词结果,但在一些特定的场景下,分词结果会造成查询结果差异,并不能满足业务实际需求,自定义词典提供的灵活扩充词库能力,可以很好的解决这个问题。

AnalyticDB MySQL版 3.0的全文检索支持自定义词典,您可以对词典表进行增加和删除以达到维护词典的目的,也可以按需创建多张词典表,以达到不同的应用场景使用不同词典的目的。

创建自定义词典表

AnalyticDB MySQL版 3.0中,具体的创建语法如下:CREATE TABLE `ext_dict` (

`value` varchar(255) NOT NULL COMMENT '扩展词/停止词值',

`type` varchar(4) NOT NULL DEFAULT 'main' COMMENT 'main表示扩展词, stop表示停止词(暂不支持停止词)',

PRIMARY KEY (`value`,`type`)

) COMMENT='用户词典表'

FULLTEXT_DICT = 'Y';

约束:

词典只能有两个字段:value和type;

value和type字段都为varchar类型,并且不能为空;

词典表主键必须同时包含value和type字段;

字段解释:

value字段表示具体的词条内容;

type字段用来标记词条类型,比如扩展词和停止词,在目前的应用场景中,只有扩展词(main)是合法的,其他类型的词条可以写入,但不会生效。

AnalyticDB MySQL版对可以创建的全文词典的数量进行了限制。目前一个逻辑库可以创建一个全文词典表,一个物理库中可以创建最多十个全文词典表。

更新自定义词典

词典本身是一张表,读写操作与普通表无异,具体约束为:

词典表不允许执行Online DDL;

不支持update和truncate;

不支持禁用索引;

不支持使用全文索引、自定义词典、自定义分词器;

词典表在被其他索引使用时禁止删除。

插入一个词条:INSERT INTO ext_dict (`value`) VALUES ('浙A');

删除一个词条:DELETE FROM ext_dict WHERE `value` = '浙A' AND `type` = 'main';

一个词典默认最多允许插入1w条记录,如果需要调整插入记录数,请提交工单。

您插入或者删除词典中的词条后,词典会立刻生效,对于新写入数据表的数据,将使用自定义词典最新的词条进行分词。

使用自定义词典

创建全文索引时,可以指定全文索引使用的自定义词典,以在线创建全文索引为例:ALTER TABLE `test` ADD FULLTEXT INDEX t_idx(`title`) WITH DICT [logical_schema.]table;

使用with dict指定使用的自定义词典,指定的自定义词典必须满足以下条件:

是一个自定义词典表;

当前用户具备对应自定义词典表的SELECT权限。

自定义词典中的单个词条如果是中英文混合,例如车牌号前缀 “浙A”,在指定自定义词典时需要同时指定使用AliNLP分词器,例如:ALTER TABLE `test` ADD FULLTEXT INDEX t_idx(`title`) WITH DICT ext_dict WITH ANALYZER alinlp;

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐