MySQL全文索引:中文语义分词检索(相似度匹配)

MySQL全文索引:中文语义分词检索(相似度匹配)

前言

项目需求是查询时实现分词检索,一般情况下我们一般会用ES组件,但是当前业务数据量不大、没有很高的并发要求,最终选择用MySQL内置的ngram分词器。ngram分词器支持中文分词使用全文索引,即可实现对中文语义分词检索。MySQL5.6之后版本支持中文分词检索。以 %关键字% 进行模糊查询结果的,不能查询多个列必须手动添加条件以实现,效率不高。

MATCH (col1,col2,…) AGAINST (expr [search_modifier])

说明:

1.MySQL全文索引类型是FULLTEXT
2.全文索引只能用于InnoDB或MyISAM表,并且只能为CHAR、VARCHAR或TEXT列创建。
3.MySQL5.7提供了一个内置的全文ngram解析器,支持中文,日文和韩文(CJK),以及一个可安装的MeCab日文全文解析器插件。
4.FULLTEXT索引定义可以在创建表时在CREATE TABLE语句中给出,也可以稍后使用ALTER TABLE或CREATE INDEX添加。
5.对于大型数据集,将数据加载到一个没有FULLTEXT索引的表中,然后在此之后创建索引,比将数据加载到一个已有FULLTEXT索引的表中要快得多。

官方文档:https://dev.mysql.com/doc/refman/5.7/en/fulltext-search.html

使用

创建索引

create table articles (
id int unsigned auto_increment not null primary key,
title varchar(255) character set utf8 collate utf8_general_ci not null comment ‘标题’,
text varchar(255) character set utf8 collate utf8_general_ci not null comment ‘文本’,
fulltext(title, text) with parser ngram) engine = InnoDB character set utf8 collate utf8_general_ci;

create fulltext index title on articles(title, text) with parser ngram;

查询

insert into articles(title,text) values
(‘文档是什么’,'1.文档是一种对软件系统的书面描述。 2.文档应当精确地描述软件系统。 3.软件文档是软件工程师之间用作沟通交流的一种方式。 '),
(‘如何写好文档’,'1.确定文档主题。 2.文章标题。 3.文章内容。4.文章排版。 '),
(‘文档模版’,'1.word模版。 2.excel模版。 3.ppt模版。 '),
(‘文档管理’,'1.word管理。 2.excel管理。 3.ppt管理。 '),
(‘文档基本操作’,'1.word操作。 2.excel操作。 3.ppt操作。 ');

select * from articles where match(title,text) against (‘文档’);
在这里插入图片描述

相关性排序

select *, match(title,text) against (‘文档’) score from articles where match(title,text) against (‘文档’) order by score desc;
在这里插入图片描述

ngram的分词数

可以在mysql的配置文件my.ini中修改ngram的分词数ngram_token_size(默认2)
例如: “abcd”
ngram_token_size=1 : ‘a’, ‘b’, ‘c’, ‘d’
ngram_token_size=2 : ‘ab’, ‘bc’, ‘cd’
ngram_token_size=3 : ‘abc’, ‘bcd’
ngram_token_size=4 : ‘abcd’

删除索引

drop index title on articles

  • 19
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL中文分词全文索引是指在MySQL数据库中使用中文分词器对中文文本进行分词,并建立相应的全文索引,以支持对中文文本的全文搜索功能。在MySQL 5.7之前,全文索引只支持英文全文索引,不支持中文全文索引,需要借助分词器将中文文本进行预处理并拆分成单词后再存入数据库。而从MySQL 5.7.6开始,MySQL内置了ngram全文解析器,可以用来支持中文、日文、韩文等语言的分词,并通过全文索引实现对中文文本的语义分词检索功能。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [MySQL使用全文索引(fulltext index) 及中文全文索引使用](https://blog.csdn.net/weixin_38289885/article/details/124634441)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [mysql ---- 全文索引中文语义分词检索](https://blog.csdn.net/weixin_44235759/article/details/124847638)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值