Lucene基礎排序演算法改進

2021-03-31 23:06:14 字數 1034 閱讀 6527

lucene基礎排序演算法:

score_d = sum_t(tf_q * idf_t / norm_q * tf_d * idf_t / norm_dt_t)

score_d: document(d) 的得分

sum_t: term(t) 的總和

tf_q: 查詢中 t 的頻度的平方根

tf_q: d 中 t 的頻度的平方根

idf_t: log(numdocs/docfreq_t + 1) + 1.0

numdocs: 索引中document的數量

docfreq_t: 包含t的document的數量

norm_q: sqrt(sum_t((tf_q*idf_t)^2))

norm_d_t: 在與 t 相同域的 d 中 tokens 數量的平方根

基礎排序演算法的不足

要點:查詢詞在乙個 document 中的位置並不重要。

如果乙個 document 中含有該查詢詞的次數越多,該得分越高。

乙個命中document中,如果除了該查詢詞之外,其他的詞越多,該得分越少。

不足:查詢精確度不好。

沒有體現網頁的重要性。

lucene的得分演算法, 不適合網頁搜尋。

改進的演算法:

score_d = k1 * oldscore + k2 * prscore + k3 * rescore + k4 * homepagescore

score_d: 記錄d的得分。

oldscore: 由基礎排序演算法計算出的記錄d的得分。

prscore: 記錄d的pagerank的得分。

rescore: 記錄d的二次檢索的加分, rescore = rescore + (hitnum - 1) * increment

homepagescore: 主頁的加分

k1, k2, k3, k4為權重係數

pr(a) = (1 - d) + d(pr(1) / c(1) + ... + pr(n)/c(n))

pagerank, 二次檢索, 以及主頁加分的調整確實優化了查詢精確度。

Lucene基礎排序演算法改進

lucene 基礎排序演算法 score d sum t tf q idf t norm q tf d idf t norm dt t score d document d 的得分 sum t term t 的總和 tf q 查詢中t 的頻度的平方根 tf q d 中t 的頻度的平方根 idf t ...

排序演算法 氣泡排序(改進)

假如我們運氣好,用了1輪就已經將整個序列排序好了,整個數列已然是有序的了。可是我們的排序演算法仍然 兢兢業業 地繼續執行第2輪 第3輪 直至n 1輪,這就很沒必要。也就是說如果序列已經有序,每一輪排序還是會繼續比較相鄰的元素,這就相當於做了一些沒用的操作。這種情況下,如果我們能判斷出數列已經有序,並...

堆排序演算法的改進

堆排序演算法的時間複雜度為o nlogn 一般採用上濾建堆,如果考慮用下濾建堆,不僅可以精簡 而且時間也會更快。堆排序演算法的改進 void siftdown int v,int l,int u frank liu 我們可以發現乙個n個元素的樹,它的高度相當於logn 向下取整 我們再來看我們分析的...