搜索引擎

image.png

360 搜索的百亿级网页搜索引擎架构实现
这个文章讲的挺细致了。

不过还是有几个可以思考的细节。

  1. 需要一个global的id 生成器,给每个url文档生成一个doc id,放进倒排里。
  2. 索引库在分片的时候不完全按照hash值,而是有部分重要索引(高质量网站)放在重要分片里,其他的放在普通分片里。
  3. 倒排索引里面如果按照文章说doc id排序,那page rank是不是就不能保证顺序。那如果一个word对应了1千万个doc,不可能都取出来然后和其他的做交。理论上应该是取出来前1000个?所以page rank高的要尽量用小的doc id? 所以在给url生成id的时候就把rank高的生成小的doc id?不过这就有额外的要求。
  4. 分发到每个分片的搜索先做本地的交计,做相关性计算,然后再返回到一个节点做并计算,排序。我觉得这样才比较合理。这每个节点都要做若干并发查询,并发计算,对多线程要求应该是很高的。加入对每个word取出10w个doc,也可以拆成100个线程去分段算吧。这样计算资源索然大了,但是还相应速度会很快。
  5. 当然这里的广播,一个query会hit到所有的分片。这个读代价还是挺大的。 对于重要索引库可以多等些时间,对于普通索引库,超过一定时间就应该不等待返回了。

全文搜索引擎 ElasticSearch 还是 Solr
这个比较了下目前两个流行的搜索引擎。

全文搜索引擎Elasticsearch,这篇文章给讲透了!
这块讲的比较全,但是对于segment的那一块不详细。
https://blog.csdn.net/smithallenyu/article/details/52789872
这个把概念用英文说了下,更准确也就能帮助理解shard和segment的表达了。
segment实际上是个单独的倒排缩影,不变的。而且会不断的合并。
从原理到应用,Elasticsearch详解
这个讲的更详细点,包括了正排和倒排文件的格式和布局(后面的一些东西没有特别细看)。

和360的架构比较起来,感觉360是不去update已经存在的倒排?一周一个库或者一月一个库?然后其他的更新都在实时库里。
ES的没有那种操作,所以就需要实时的更新,更新很多个segment就会导致索引速度低一些吧,毕竟每个segment都要查一遍。再做合并。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容