搜索引擎-架构概述(2)
本文目录 [-点此收起]
接上一部分:搜索引擎-架构概述(1)
查询处理系统
查询处理系统主要包含三个构件:用户交互、排序和评价。
用户交互组件 (User interaction)
创建查询、完善查询以及向用户展示结果.
比如,将用户的查询转换为索引项.
并将从搜索引擎得到的有序文档列表组织成搜索结果,展示给用户.
1.查询输入 (Query Input)
为查询语言(query language)提供接口和解析器。
查询语言一般只有很少的几个操作符,这些操作符指示应该对查询作特殊处理。
比如布尔型操作符,AND、OR和NOT,当然也包括临近操作符(proximity)。
查询语言的作用,一是用来描述更加复杂的查询,二是描述查询转换的结果。
2.查询转换 (Query Tranformation)
改进初始查询,在生成有序的文档前后提供完善处理。
包括一些文本转换的技术。
比如分词、停用词去除和词干提取,以生成可以和文档的索引项可以匹配的索引项。
拼写检查(spell checking)和查询建议(query suggestion)用于生成和用户查询相似的输出。
查询扩展(query expasion)和相关性反馈(relevance feedback)技术,使用额外的词项来修改初始查询。这些词项的来源,主要是对文档中词项的出现情况、用户认为相关的文档中出现的词项等分析为基础。
3.结果输出 (Results Output)
对已经排好序的文档结果进行展示。
包括生成文档摘要(snippets)和高亮关键字和关键段落(highlighting)。
另外,也可能包括对文档集进行聚类展示,并添加一些相关的广告。
排序组件 (Ranking)
利用查询和索引生成有序的文档列表.
这个搜索引擎的核心组件,它接收用户查询,并根据检索模型得到一个按分值排好序的文档列表.
排序必须满足高效、优质.
1.评分 (Scoring)
使用评分算法为文档进行评分,这是文档排序的基础。
评分组件是搜索引擎的核心.
一般的评分可描述为:
∑iqidi
其中qi 和di 分别是第i 个查询词项和文档词项的权重.
评分方式依赖于检索模型,检索模型有很多,比如基于BM25、查询似然度的检索模型。
2.优化性能 (Performance optimization)
排序的效率对于搜索引擎的表现至关重要,所以需要进行性能优化。
性能优化设计排序算法和索引表的设计等,目的是降低响应延时、提高吞吐率。
一次一词项方式(term-at-a-time)
以词项为单位,先处理词项ti 的倒排表,再处理ti+1 ,需要对每个未处理完的文档建立一个累加器。
一次以文档方式(document-at-a-time)
以文档为单位,先计算文档di ,再计算di+1 ,需要文档在所有倒排表中的顺序一致。
安全方式优化(safe)
优化前后的文档排序结果相同。
非安全方式优化(unsafe)
优化前后的文档排序结果不同。
3.分布式 (Distribution)
既然索引是分布式的,那么排序也可以采用分布式方法。
查询代理(query broker)可以将多个用户查询分发到不同的计算节点,并负责聚合各个计算节点的处理结果。
缓存(cache)也是一种分布式的方式,如果将前一个用户的查询结果保存在内存中,那么如果有其他用户使用类似的查询,将可直接从缓存中返回结果,这大大提高了查询的效率。
评价组件 (Evaluation)
评价和监测搜索的质量和性能.
其中,利用日志系统来记录用户行为,并对其进行分析以优化搜索.
可以看出,评价系统会对排序系统做出改善和调整.
显然,评价系统是滞后的,所以一般它作为离线系统的一部分.
1.日志分析 (Logging)
记录用户搜索行为日志,对于改进排序和查询处理意义重大。
用户的查询日志,可以作为拼写检查、查询推荐、查询缓存等任务的基础。
精准广告技术就依赖于用户的搜索行为分析。
用户对查询结果的处理方式可以用来反映文档对于用户查询是否是相关的。
如果用户在搜索引擎返回的排序文档中,点击了其中一个,那么这个文档可能就是和用户查询相关性比较高的一个。
同时,跟踪用户的点击流和页面驻留时间,可以用来评价和训练排序算法。
2.排序分析 (Ranking Analysis)
评价和改善搜索的有效性。
通过大量的查询-文档对,结合查询日志,可以判定一个排序算法的结果,用于和其它算法进行比较,以确定更优化的参数等来改善排序结果。
3.性能分析 (Performance Analysis)
评价和改善搜索的效率。
监测和收集系统运行的性能指标。如响应时间、吞吐量、网络延时等等。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?