2011-03-10 50 views
1

我正在構建一個系統,我只想顯示過去幾天索引的結果。 此外,如果我只想返回幾天(數千個文檔)的結果,我不想維護一個包含一百萬個文檔的巨型索引。另一方面,我的系統嚴重依賴索引中存儲的文檔中出現的條目具有現實的分佈(因此:實際的IDF)。這就是說,我想使用一個小的索引來返回結果,但我想從一個更大的索引(甚至外部源)使用IDF計算文檔分數。在Lucene中,我可以搜索一個索引,但使用另一個索引的IDF嗎?

Similarity API似乎不允許我這樣做。 idf方法沒有收到所用術語的參數。

另一種可能性是使用TrieRangeQuery來確保顯示的文檔在最近幾天內。再說一次,我寧願不要一個更大的索引。這種查詢也不便宜。

回答

2

你應該能夠擴展IndexReader並覆蓋docFreq()方法來提供你喜歡的任何值。此實現可以做的一件事是打開兩個IndexReader實例 - 一個用於小型索引,另一個用於大型索引。除docFreq()委託給大型索引外,所有方法均委託給小型IndexReader。您需要縮放返回的值,即

int myNewDocFreq = bigIndexReader.docFreq(t)/bigIndexReader.maxDoc() * smallIndexReader.maxDoc() 
+0

我不太瞭解縮放的需要。你能澄清嗎? – 2011-03-11 20:01:59

相關問題