2012-02-02 72 views
2

在Lucene中,我想知道倒排索引中的訪問次數。Lucene倒排索引訪問計數

也許,Lucene的有倒排索引這樣,

貓狗
-----
D01 D02
D02 D01
D03 D03
---- - -----

如果我使用查詢「cat dog」,Lucene會連續訪問倒排索引。 然後我詢問top-2的結果,只有4次訪問,Lucene將返回d01,d02。 在這種情況下,我想知道訪問時間(在本例中爲「4」)。

目前,我使用這樣的Lucene。

Query q = new QueryParser(Version.LUCENE_35, "title", analyzer).parse(querystr); 
int hitsPerPage = 10; 
IndexSearcher searcher = new IndexSearcher(index, true); 
TopScoreDocCollector collector = TopScoreDocCollector.create(hitsPerPage, true); 
searcher.search(q, collector); 
ScoreDoc[] hits = collector.topDocs().scoreDocs; 

謝謝。

回答

0

漸近地說,如果有p匹配,並且您找到頂部k,則時間將爲p log k。所以在你的情況下,6 log 2 = 6。 (當然這個數字很小,這個公式給出了可笑的結果)。

有關更多信息,請參閱this

請注意,「前兩名」並不意味着「前兩名」,而是「兩項得分最高」。根據示例中的權重,Lucene可能會忽略d03。

+0

謝謝。我認爲Lucene會按照分數保留倒排索引排序。因此,在這個例子中,「前兩名」是「兩個最高分」。你的意思是說Lucene總是訪問(p log k)時間?我認爲如果Lucene已經倒過來索引,Lucene會在第四次訪問後停止訪問。我錯了嗎? – prory 2012-02-03 07:50:20

+0

@prory:文檔按照每個學期的ID排序,而不是按分數排序。這是比按分數排序更快的方式,但這裏解釋太長。我只能說:閱讀鏈接的博客文章和附件。舉一個例子,如果d01和d02中的唯一字是「貓」和「狗」,則Lucene將在第四次訪問後停止。但是說它總是隻需要4個就太複雜了。 – Xodarap 2012-02-03 15:11:54