在lucene中获取文档(doc)中的命中数

Posted

技术标签:

【中文标题】在lucene中获取文档(doc)中的命中数【英文标题】:Getting the number of Hits in a document(doc) in lucene 【发布时间】:2011-06-04 22:44:39 【问题描述】:

如何在 Java 中获取 Lucene 中每个文档的 Hits 数。我有

IndexReader 阅读器; reader = IndexReader.open(FSDirectory.open(new File(index)), true); 搜索者 searcher = new IndexSearcher(reader); 字符串字段 = “内容” QueryParser parser = new QueryParser(Version.LUCENE_CURRENT, field,analyzer); 查询查询 = parser.parse("test"); TopScoreDocCollector 收集器 = TopScoreDocCollector.create( 5 * hitsPerPage, false); searcher.search(查询,收集器); ScoreDoc[] hits = collector.topDocs().scoreDocs; 搜索者 searcher = new IndexSearcher(reader); int numTotalHits = 收集器.getTotalHits(); System.out.println(numTotalHits + " 匹配文档总数");

for (int i = start; i

tfv 为空 :( 有人可以直接说明如何从那里获取每个文档中的点击量。

编辑:

如果我们在索引时设置 TermVector.YES,它会起作用。

【问题讨论】:

【参考方案1】:

您可以编写自定义Similarity 实现。您将可以访问术语频率,这将为您提供给定术语在给定文档中出现的次数。

【讨论】:

你能给我举个例子吗? 只是扩展相似性类。实现存储频率的 tf(float frequency) 方法。不要忘记将您的相似性附加到索引搜索器lucene.apache.org/java/3_0_3/api/all/org/apache/lucene/search/…【参考方案2】:

这是Get search word Hits ( number of occurences) per document in Lucene的副本

正如该答案所说,您可以使用术语频率向量。 jarekrozanski 的答案更快,但您需要创建一个您可能不喜欢做的自定义相似性类。

【讨论】:

这个链接建议我们使用术语频率向量来表示字段,这在 lucene 3.0 版本中不再存在。虽然我们可以从 reader Object 中获取它,但它需要 docNumber。你能告诉我文件编号是多少吗? @sharma: "docNumber" 只是文档的 ID,即 reader.doc()searcher.doc() 做同样的事情。因此,使用您的代码,可以找到文档 ID 为 hits[i].doc @Xodarap:当我使用 IndexReader 对象获取 TermFreqVector 时,它出于某种原因返回 null。在 3.0 版本中,除了 IndexReader 之外,还有其他对象可以获取 TermFreqVector,你知道吗? @sharma:一切都将基于读者。您确定您传入的字段名称正确吗? 我已经更新了这里的代码,如果有建议,请告诉我。我确定字段名称是正确的

以上是关于在lucene中获取文档(doc)中的命中数的主要内容,如果未能解决你的问题,请参考以下文章

Lucene - 获取文档频率 - termsEnum.docFreq() 总是返回 1

lucene3.0 通过IndexSearcher.doc(i)获取Document 非常慢,如何提高性能?

如何在 Unity 中获取有关缓存未命中的分析数据?

如何获取 lucene 索引中每个术语的帖子列表

Lucene 4.9:从索引中获取一些选定文档的 TF-IDF

缓存命中