搜索引擎开发检索效率提升:索引到底是什么?
从图中可发现,搜索加载超过1s就会直接影响页面放弃率,1s是用户的观感界限,所以搜索引擎的响应时间是需要着重优化的。然而无论是大搜还是垂搜,随着大数据时代的发展,被查询记录数都是数以亿计,甚至万亿计。搜索引擎是如何在大数据体量做到ms级返回的,这里就牵扯到索引的概念了。
索引到底是什么?我们今天就来絮叨絮叨。
后来随着公司的爆发式增长,你的公司现在有1w人了,部门已经是事业群了,组织架构也从之前的单层升级到多层,这时你想找到有“全栈经验”的开发工程师组建新的团队开发新的产品,发现把找人任务分下去后“疯了”,因为很有可能找完1w个人之后才能找到合适的人,这个时候你又想到一招,反过来思考,我既然最终要找的是人,那么我就以人为中心建立一套标准,先找到对应的人,再根据对应的人反推属于哪个部门,再让这个部门经理找自己团队还有没有符合要求的人,这样范围不是减小了很多吗?也大大提升了效率。这就是所谓的倒排索引。
【正排索引】
正排索引也叫正向索引(forward index),在蜘蛛爬取页面后,系统将页面标题、内容,经过文本预处理,可以得到独特的、能反应页面的主题内容、以词为单位的字符串。搜索引擎索引程序就可以提取关键词信息,包含出现次数,位置等,为该页面建立页面id与关键词的对应关系,而这个过程就叫做正排索引。
以例子来说明,现在有5篇关于“胡歌”的资讯,如下:
根据5篇资讯的标题,建立正排索引如下:
【摘要索引】
【分布式索引】
以上几种索引都是索引的结构,但仅仅使用这些索引结构进行优化是不够的,还需要在架构层面进行索引优化,既所谓的分布式索引,开源的solr和Elasticsearch都支持分布式索引,根据文档的id计算hash值,负载均衡将索引写入至对应的分片,以Elasticsearch为例,看下如下过程:
Node-1和Node-2为ES集群的两个节点,根据不同的id值hash后 ,写入不同的节点。查询过程基于整个集群并行查询,提升查询效率。
现实中无论大搜还是垂搜,都使用了以上的索引结构及架构,大厂甚至部署了集群+集群的方式来支撑高并发,来实现高性能。但每个集群下每个节点都需要索引来支撑,所以效率是搜索的门户。