搜索引擎架构 + 检索需求方案演进
一、宏观
- 全网搜索引擎,三大模块:spider,index,rank
- spider + index:工程系统,各大搜索引擎比如百度和谷歌,都是差不多的。
- rank:业务策略系统,这个不同的搜索引擎不一样。
- 搜索结果的好坏,核心在rank
二、实时搜索引擎
架构核心:
- 索引分级
- dump & merge
实施要点:
-
实时定点写
-
实时分段读
-
异步导出合并
三、微观
-
正排索引:url_id快速找到list<item>
-
倒排索引:分词item快速找到list<url_id>
-
检索过程:先分词,再找item对应的list<url_id>,最后求交集
-
有序集合求交集:
a.二重for循环,时间复杂度O(n^2)
b. 拉链法,时间复杂度O(n)
c. 水平分桶,多线程并行
d. bitmap,大大提高运算并行度,时间复杂度O(n)
e. 调表,时间复杂度O(log(n))
四、满足检索需求
- 原始阶段 - LIKE
- 初级阶段 - mysql的全文索引
- 中级极端 - 开源外置索引,比如ES、Solr、Lucene
- 高级阶段 - 自研搜索引擎
五、参考
- https://blog.csdn.net/qijiqiguai/article/details/78702506