参考博客
个人总结以及反思
里面比较有意思的是索引外置,从而减少去每张表反复查索引,也不受单表数据量的影响性能
这里涉及两个概念:正排索引,倒排索引
按照大佬的解释:
正排索引
一篇文章拆分成多个词语,会存储成Map<url,List<detail>>,作用:方便我们通过文章id查询分词
倒排索引
根据词语去查找url,存储Map<detail,List<url>,作用:根据分词来查找拥有这个分词的文章url,根据具体的需求还可以求交集。总的作用是根据特定的业务构造倒排索引
搜索引擎对比
外置索引保存在搜索引擎里面,比如Lucene,ES等等
引用大佬的原文:
Lucene虽好,潜在的不足是:
(1)Lucene只是一个库,需要自己做服务,自己实现高可用/可扩展/负载均衡等复杂特性;
(2)Lucene只支持Java,如果要支持其他语言,必须得自己做服务;
(3)Lucene不友好,这是很致命的,非常复杂,使用者往往需要深入了解搜索的知识来理解它的工作原理,为了屏蔽其复杂性,还是得自己做服务;
为了改善Lucene的各项不足,解决方案都是“封装一个接口友好的服务,屏蔽底层复杂性”,于是有了ES:
(1)ES是一个以Lucene为内核来实现搜索功能,提供REStful接口的服务;
(2)ES能够支持很大数据量的信息存储,支持很高并发的搜索请求;
(3)ES支持集群,向使用者屏蔽高可用/可扩展/负载均衡等复杂特性;
还需要解决一个索引的定量更新
在这篇博客里面也介绍了,分多个搜索引擎库,一个全量,一个一天,一个是一小时,基本一小时那个一直更新,缓解全量更新时间慢的问题