在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 非常慢,如何提高性能?