【问题标题】:Lucene inverted index access countLucene 倒排索引访问次数
【发布时间】:2012-02-24 23:41:47
【问题描述】:

在Lucene中,我想知道倒排索引的访问次数。

也许,Lucene 有这样的倒排索引,

猫狗
----- -----
d01 d02
d02 d01
d03 d03
----- -----

如果我使用查询“猫狗”,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;

谢谢。

【问题讨论】:

    标签: lucene inverted-index


    【解决方案1】:

    渐近地,如果有 p 匹配并且您找到顶部的 k,则时间将为 p log k。所以在你的情况下,6 log 2 = 6。 (当然对于这么小的数字,这个公式给出了荒谬的结果)。

    请参阅this 了解更多信息。

    请注意,“前两名”并不是指“前两名”,而是“得分最高的两名”。根据您示例中的权重,Lucene 可能会忽略 d03。

    【讨论】:

    • 谢谢。我认为 Lucene 会按照术语分数保持倒排索引排序。因此,在该示例中,“前两个”是“两个最高分”。你的意思是Lucene总是访问(p log k)时间吗?我想如果 Lucene 有这样的倒排索引,Lucene 将在第 4 次访问后停止访问。我错了吗?
    • @prory:文档按每个术语的 ID 排序,而不是按分数排序。这是一种比按分数排序更快的方法,但在这里解释太长了。我只能说:阅读链接的博客文章和附件。例如,如果 d01 和 d02 中只有“cat”和“dog”,那么 Lucene 将在第四次访问后停止。但要说永远只需要 4 就太复杂了。
    猜你喜欢
    • 2013-07-07
    • 2011-08-15
    • 2011-07-12
    • 1970-01-01
    • 2020-02-13
    • 2016-06-17
    • 2016-04-21
    • 1970-01-01
    • 2014-11-01
    相关资源
    最近更新 更多