Mysql实现模糊查询 最简单的是LIKE
关键字, 如
SELECT * FROM `content` WHERE `topic` LIKE '%地球%';
而当然也可以使用LOCATE()
,POSITION()
等内置函数来实现. 不过 这种模糊查询都存在一定的局限性. 举个🌰:
记录为: 你好,我的世界
, 此时通过关键词你好世界
便无法搜索到.
在Mysql 5.7.6后 Mysql内置了ngram分词疫情, 可以实现中文, 日文, 韩文的解析. 我们需要对指定字段建立全文索引并指定分词引擎.
我们需要先设置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('你好世界')
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 协议进行许可, 转载请注明原文链接