• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

MySQL全文搜索

武飞扬头像
李乾文
帮助1

一、前言

虽然在搜索领域,ES一骑绝尘,但ES部署运维、以及数据库的更新同步还是有些麻烦的。那么涉及到的一些对搜索要求不那么高的功能,比如说关键词联想、文章搜索等大部分场景,笔者考虑还是尽量在MySQL实现以减轻开发和运维成本。MySQL本身是自带简单的全文搜索引擎的。

二、分词配置

MySQL从5.7开始支持InnoDB引擎的中文分词全文检索

软件版本:MySQL 5.7.34

ngram分词器
用ngram全文解析器对“生日快乐”进行分词:

n=1: '生', '日', '快', '乐' 
n=2: '生日', '日快', '快乐' 
n=3: '生日快', '日快乐' 
n=4: '生日快乐'

一般默认n=2,n=1的情况对于搜索而言没有太多意义,反而会导致搜索精度问题,搜索出来的排序不是自己想要的。(可能是相关度计算排序这块,笔者不是很清楚,希望懂的朋友不吝指教)

如果确实需要更改,可以修改配置文件:

[mysqld]
ngram_token_size=1

然后重启:

SHOW VARIABLES  LIKE '%ngram%';

学新通

三、创建索引

使用ngram分词器创建索引:

ALTER TABLE `dbtest`.`msg`
  ADD FULLTEXT INDEX (`msg`) WITH PARSER ngram;

若是需要搜索两个字段则需要创建复合索引:

ALTER TABLE `dbtest`.`post`
  ADD FULLTEXT INDEX (`title`, `content`) WITH PARSER ngram;

四、搜索效果

SELECT *,MATCH (title,content) AGAINST ('赤壁赋') AS score 
	FROM post WHERE MATCH (title,content) AGAINST ('赤壁赋');

学新通

五、参考资料

MySQL 5.7 中文全文检索使用教程
MySQL中文全文检索
mysql全文索引查询相关度、相似度、权重值

如果本文有帮到你,请点个赞让我知道 😃

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgggfie
系列文章
更多 icon
同类精品
更多 icon
继续加载