Lucene基礎排序演算法改進

2021-08-30 04:53:56 字數 1302 閱讀 4302

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