一、MySQL的全文索引(不推荐)
1、前言
MySQL的全文检索功能,既支持英文,也支持中文。
但很遗憾的是,英文分词一点问题没有,但中文分词上的处理就非常糟糕。
MySQL全文索引不能按照语义对中文进行分词,只能按照字符切词。一句中国话,MySQL会切分出许多无意义的词汇。
2、MySQL全文索引的使用
(1)给字段添加全文索引
ALTER TABLE product_sku ADD FULLTEXT INDEX `title` (`title`);
(2)执行全文检索查询
MySQL 的全文检索关键词是 “match ... against”
举例:
SELECT id,title,price FROM product_sku WHERE MATCH(title) AGAINST("华为mate40");;
(3)MySQL全文索引的缺点
-
中文字段创建全文索引,切词结果太多,占用大量内存空间
-
更新字段内容时,全文索引不会更新,必须定期手动维护
-
在数据库集群中,维护全文索引难度非常大
-
搜索结果不准确,可能明明有数据,但搜索不到结果(比如华为mate 40 Pro 白色,如果搜索“华为mate白色”就搜索不到,必须得添加空格才可能搜索到)
二、使用专业的全文检索引擎(推荐)
最著名的是Lucene、ElasticSearch、Sphinx
这几个全文检索搜索引擎都有比较完整的文档,因此这里不做过多介绍。