2011-10-09 165 views
2

我倒排索引是這樣的:高效的方式使用倒排索引排名最高的搜索結果

token_word |文檔ID,位置;文檔ID,位置;文檔ID,位置;

在算法中,爲了在查詢短語時進行排名,我打開每個單詞的桶數據,然後查找連續的位置匹配,排名更高,只是一個簡單的相關性排名。 問題是,我需要檢查算法中的所有結果,以便按「排名」排序,即使我僅顯示每頁10個。

任何人都知道一種方法來解決這個問題?也許我需要在索引本身排名docid的?

回答

4

除了token_word | docid,position;docid,position;docid,position;的方法,我建議你添加一個token_word | docid,frequency;docid,frequency;docid,frequency;記錄。

這樣,您只需在迴應查詢時考慮一次文檔。這可能會增加預處理,但在用戶查詢時減少無用的開銷。

您可能必須處理多字查詢(即幾乎所有查詢)問題,所以採取docid,position方法爲一些結果是接近或領帶。

如果我處於您的位置,我會做什麼:由於您每頁顯示10個結果,我會根據頻率爲所有文檔編制索引,然後根據位置爲第一個頁面僅索引前10個。如果用戶在那裏移動,則對第二頁執行相同操作。


在這種方法的缺點是有時候頁面N + 1的前幾個結果可能會變成比最後幾頁ň上更好。