2012-02-02 42 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