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
為權重係數
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 向下取整 我們再來看我們分析的...