前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL 全文索引 实现相似度搜索

MySQL 全文索引 实现相似度搜索

作者头像
xcsoft
发布2022-02-22 15:40:58
3.2K0
发布2022-02-22 15:40:58
举报
文章被收录于专栏:星辰日记星辰日记

模糊查询

Mysql实现模糊查询 最简单的是LIKE关键字, 如

代码语言:javascript
复制
 SELECT * FROM `content` WHERE `topic` LIKE '%地球%';

而当然也可以使用LOCATE(),POSITION()等内置函数来实现. 不过 这种模糊查询都存在一定的局限性. 举个🌰:

记录为: 你好,我的世界, 此时通过关键词你好世界 便无法搜索到.

如何解决

在Mysql 5.7.6后 Mysql内置了ngram分词疫情, 可以实现中文, 日文, 韩文的解析. 我们需要对指定字段建立全文索引并指定分词引擎.

  • 需要注意: 建立全文索引的字段 数据类型只能为 VARCHAR, TEXT, CHAR

设置分词

我们需要先设置ngram的分词长度, 由于中文词语一般为两个字, 所以建议设置为2

代码语言:javascript
复制
mysqld --ngram_token_size=2  

也可以通过修改mysql配置文件, 指定ngram_token_size=2

建立索引

选定分词引擎建立FLULTEXT索引

代码语言:javascript
复制
ALTER TABLE `table_name` ADD FULLTEXT INDEX `index_name`(`column_name`) WITH PARSER ngram;

进行搜索

建立索引后, 可以通过 match against语句进行搜索

代码语言:javascript
复制
SELECT * FROM `table` WHERE MATCH (`column`) against('你好世界')

全文索引的两种搜索模式

  • 自然语言搜索(也是默认的搜索模式): 不能使用操作符 进行复杂检索.
  • BOOLEAN模式 : 可以通过操作符 进行复杂搜索, 与搜索引擎类似.
代码语言:javascript
复制
SELECT * FROM `table` WHERE MATCH (`column`) against('你好世界' IN NATURAL LANGUAGE MODE)

# 必须包含'你好', 但不能包含'我的'
SELECT * FROM `table` WHERE MATCH (`column`) against('+你好 -我的' IN BOOLEAN MODE)

参考文章

本文链接:https://cloud.tencent.com/developer/article/1945451

所有原创文章采用 CC BY-NC-SA 4.0 协议进行许可, 转载请注明原文链接

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 模糊查询
  • 如何解决
    • 设置分词
      • 建立索引
        • 进行搜索
          • 全文索引的两种搜索模式
            • 参考文章
            相关产品与服务
            云数据库 SQL Server
            腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档