什么是网络搜索引擎

倒排索引为什么用FST(或者trie树)而不是hashmap?hashmap只能满足精确key查找,倒排需要匹配各种模糊搜索。

1. 召回

查询query转为集合运算的bool表达式

改写优化下get_word_match,更加适用于短语

2. 排序:关键词个数 - 向量余弦夹角- tf-idf

召回主要突出文档与查询的相似性、排序更主要是找到文档与文档之间的差异性、区分性从而获得相关度的不同评分。

下方向量每一个维度表示一个词组,所有词组组成词表。

每个文档的打分实际就是在所选的向量空间下求查询短语向量与当前文档向量之间的相似度。

所以词表选择影响很大,可以选当前文档的所有分词、召回结果集的分词集合,候选集(相当于倒排索引的词典?)所有文档的分词、所有采集到的文档的总分词集合、整个文档世界的分词集合。一般选择候选集。

对于长文档,可以让tf/文档长度代替tf来抵消长文档对词频的影响

预处理优化:在构建倒排索引的词典vocabulary的时候,可以同时把所有文档的tf/idf值都提前计算出来保存到dict,当执行搜索时可以直接从dict词典中查出来

相对而言,粗排往往是整个搜索性能的瓶颈,粗排可以通过减少向量维度(如只用query生成词典vocabulary空间),或者简化算法(比如用ann算法,而不用tf/idf、bm25等复杂算法)等来快速降低文档规模。另外,分布式环境下也有更多优化方式。

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

相关阅读更多精彩内容

友情链接更多精彩内容