MySQL 全文索引实现相似度搜索
MySQL 全文检索
在 Mysql 5.7.6 后 Mysql 内置了 ngram 分词疫情,可以实现中文、日文、韩文的解析。
我们需要对指定字段建立全文索引并指定分词引擎。
- 官方文档
【注意】建立全文索引的字段 数据类型只能为 VARCHAR, TEXT, CHAR
设置分词
通过设置 MySQL 的 ngram_token_size 参数。
默认值:2
最小值:1
最大值:10
查看参数:
show variables like 'ngram_token_size';
建立索引
选定分词引擎建立 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)
相关文章