全文检索能够利用倒排索引,不是模糊查询.
倒排索引简单点说就是可以根据"属性值"快速找到"属性名".
你可以把"文章里包含的关键词"理解为"属性值",把"文章编号"理解为属性名.
这跟我们根据"文章编号(索引)"查询"文章内容",正好相反,所以叫做"倒排".
倒排索引的结构其实就是很简单的映射:
"关键词1": "文档1编号", "文档2编号"
"关键词2": "文档1编号", "文档3编号"
可见全文检索系统中,生成倒排索引的开销是比较大的,跟文章的关键词数量成正比.
题外话:像商城里的根据多种属性的名值对(比如价格区间/颜色/尺码/品牌等等)筛选商品这种查询,也能通过"倒排索引"来优化查询.跟文章的关键词相比,这些商品的属性(名值对ID)是事先确定的,不需要通过分词来获取.
MySQL是支持全文索引,所以可以基于MySQL实现全文检索.如果你没有字典,那你就使用二元分词(n-gram=2).
二元分词跟中文分词的一些区别如下:
二元分词不依赖词典,中文分词依赖词典.
二元分词分词速度要比中文分词快.
二元分词的索引大小要比中文分词大,分词字数约为原文字数的2倍.
二元分词的索引虽然比较大,但能保证搜索结果覆盖用户输入的关键词.