Code前端首页关于Code前端联系我们

开发搜索引擎以提高可查找性:索引到底是什么?

terry 2年前 (2023-09-27) 阅读数 70 #数据结构与算法
在搜索引擎的搜索框中输入你想要查找的关键词后,首先影响你体验的不是不相关的搜索结果,而是“正在加载”和“” Loading界面上出现“”、“搜索响应失败”等字样。据统计,搜索页面的加载时间会严重影响用户的搜索体验,造成高如下图所示:

搜索引擎开发检索效率提升:索引到底是什么?

从图中可以看出,如果搜索负载大于1秒,则直接影响页面放弃率。 1s是用户的感知限制”,因此搜索引擎响应时间需要优化。无论是打搜还是吹搜,随着大数据时代的发展,请求的记录数量达到数亿甚至万亿。在大数据量中实现毫秒级回报的引擎涉及到索引的概念。

索引到底是什么?今天我们就来说说吧。 搜索引擎开发检索效率提升:索引到底是什么?例如:如果你是创业者,你的公司一开始就只有10名农民工。有一天你会想找一些有“销售经验”的人来组建一个销售团队。相信你一问一问就能很快找到答案并把它们一一删除。这称为 遍历查询 。 几个月后,您收到了一笔投资,并将您的团队从 10 人扩大到 100 人。此时,你想找一些有“运营经验”的员工来组建运营团队,但你觉得一次只问一个有点不知所措。 ,所以你提前想了一个办法,把100个人分成10个部门。如果你想找不同经历的人,只要到相应的职能部门,让部门经理去找就可以了。这是搜索中的积极指数。如下图:

搜索引擎开发检索效率提升:索引到底是什么?

后来,随着公司的爆发式增长,你们公司现在有一万人了,部门变成了事业群,组织架构也从以前的单层升级为多层。现在你想找一个有“全栈经验”的开发工程师,组建一个新的团队来开发新产品,分完找人的任务后发现他们“疯了”,因为很有可能搜遍一万人,才能找到对的人。这时候你就想一招,如果你反过来想,既然我最终是在找人,那我就针对建立一套标准,先找人对应的人,然后根据对应的人推断出属于哪个部门。如果再让部门经理看看他的团队里有没有符合要求的人,范围不是就大大缩小了吗?它还显着提高了效率。这称为 倒排索引

搜索引擎开发检索效率提升:索引到底是什么?

【正向索引】

正向索引也称为正向索引。蜘蛛抓取页面后,系统对页面标题和内容进行预处理,以获得唯一且响应灵敏的索引。页面的主题内容,以单词为单位的字符串。搜索引擎的索引程序可以提取关键字信息,包括出现的次数、位置等,并建立该页面的页面ID和关键字之间的对应关系。这个过程称为前向索引。

举例说明,目前“胡歌”的信息有 5 条,如下:

搜索引擎开发检索效率提升:索引到底是什么?

根据 5 条信息的标题,创建正向索引:如下:

搜索引擎开发检索效率提升:索引到底是什么?从上图可以看出,这种方法的结构比较简单,制定索引也比较方便。如果添加文档,只需按照此格式在末尾添加索引块即可。如果要删除,只需提供ID即可删除。然后您可以找到所有关联信息并立即将其删除。但当检索且不知道所请求内容的ID时,只能从1001到1005进行扫描,以确保不遗漏召回号,因此的检索效率 极低。 【反向索引】因为正向搜索的查询效率太低,所以有反向索引,也叫反向索引。在索引过程中,所有与正向索引中的ID匹配的关键词都会被倒排,并根据文档中出现的关键词设置一系列索引,如下:

搜索引擎开发检索效率提升:索引到底是什么?如上图所示,如果您想要搜索“cat”,只能搜索ID为1003的文档。 缩小了搜索范围,提高了搜索效率。 倒排索引的应用场景非常广泛,比如:不仅用在搜索引擎、大型数据库索引、文档检索、多媒体检索/信息检索等。总之,倒排索引是一个非常重要的索引检索领域的索引机制。

【摘要索引】此外,还有摘要索引,可以提高某些场景下的搜索效率。摘要索引存储了文档必须返回并一起显示的相应信息,可以通过Doc_id定位文档。存储位置并获取相应的摘要信息,为用户提供摘要获取服务。摘要索引的结构与正向索引类似,但功能不同。结构如下:

搜索引擎开发检索效率提升:索引到底是什么?

[分布式索引]

以上索引都是索引结构,但是仅仅使用这些索引结构进行优化是不够的。 ,还需要进行架构层面的索引优化,即所谓的分布式索引。开源的Solr和Elasticsearch都支持分布式索引。根据文档 ID 计算哈希值,负载均衡器使用 Elasticsearch 将索引写入相应的分片。例如,考虑以下过程:

搜索引擎开发检索效率提升:索引到底是什么?

Node-1 和 Node-2 是 ES 集群的两个节点。根据不同的ID值进行哈希处理后,写入不同的节点。查询过程基于整个集群的并行查询,提高查询效率。

现实中,大搜和吹搜都采用了上述的索引结构和架构。大公司甚至采用集群+集群的方式来支持高并发,实现高性能。但每个集群中的每个节点都需要索引支持,所以效率是搜索的门户

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

热门