MySQL 全文索引 实现相似度搜索
  • 累计撰写 120 篇文章
  • 累计收到 1 条评论

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

2024-10-19 / 0 评论 / 47 阅读

模糊查询

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

 
 
 
SELECT * FROM `content` WHERE `topic` LIKE '%地球%';

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

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

如何解决

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

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

设置分词

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

 
 
 
mysqld --ngram_token_size=2

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

建立索引

选定分词引擎建立FLULTEXT索引

 
 
 
ALTER TABLE `table_name` ADD FULLTEXT INDEX `index_name`(`column_name`) WITH PARSER ngram;

进行搜索

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

 
 
 
SELECT * FROM `table` WHERE MATCH (`column`) against('你好世界')

全文索引的两种搜索模式

  • 自然语言搜索(也是默认的搜索模式): 不能使用操作符 进行复杂检索.
  • BOOLEAN模式 : 可以通过操作符 进行复杂搜索, 与搜索引擎类似.
 
 
 
SELECT * FROM `table` WHERE MATCH (`column`) against('你好世界' IN NATURAL LANGUAGE MODE)
 
# 必须包含'你好', 但不能包含'我的'
SELECT * FROM `table` WHERE MATCH (`column`) against('+你好 -我的' IN BOOLEAN MODE)
收藏

扫描二维码,在手机上阅读

评论一下?

OωO
取消