



倒排索引為什么用FST(或者trie樹)而不是hashmap?hashmap只能滿足精確key查找,倒排需要匹配各種模糊搜索。

1. 召回
查詢query轉(zhuǎn)為集合運(yùn)算的bool表達(dá)式



改寫優(yōu)化下get_word_match,更加適用于短語

2. 排序:關(guān)鍵詞個(gè)數(shù) - 向量余弦夾角- tf-idf
召回主要突出文檔與查詢的相似性、排序更主要是找到文檔與文檔之間的差異性、區(qū)分性從而獲得相關(guān)度的不同評(píng)分。

下方向量每一個(gè)維度表示一個(gè)詞組,所有詞組組成詞表。
每個(gè)文檔的打分實(shí)際就是在所選的向量空間下求查詢短語向量與當(dāng)前文檔向量之間的相似度。
所以詞表選擇影響很大,可以選當(dāng)前文檔的所有分詞、召回結(jié)果集的分詞集合,候選集(相當(dāng)于倒排索引的詞典?)所有文檔的分詞、所有采集到的文檔的總分詞集合、整個(gè)文檔世界的分詞集合。一般選擇候選集。



對(duì)于長(zhǎng)文檔,可以讓tf/文檔長(zhǎng)度代替tf來抵消長(zhǎng)文檔對(duì)詞頻的影響


預(yù)處理優(yōu)化:在構(gòu)建倒排索引的詞典vocabulary的時(shí)候,可以同時(shí)把所有文檔的tf/idf值都提前計(jì)算出來保存到dict,當(dāng)執(zhí)行搜索時(shí)可以直接從dict詞典中查出來

相對(duì)而言,粗排往往是整個(gè)搜索性能的瓶頸,粗排可以通過減少向量維度(如只用query生成詞典vocabulary空間),或者簡(jiǎn)化算法(比如用ann算法,而不用tf/idf、bm25等復(fù)雜算法)等來快速降低文檔規(guī)模。另外,分布式環(huán)境下也有更多優(yōu)化方式。