如何在Lucene中获得一小部分文档

时间:2011-03-12 22:41:12

标签: lucene

我想计算给定查询的少量文档(而不是整个集合)的分数。我的尝试如下,每个文档返回0分,即使我测试的查询来自我试图得分的文档中的术语。我正在使用Lucene 3.0.3。

List<Float> score(IndexReader reader, Query query, List<Integer> newDocs ) {
List<Float> scores = new List<Float>();
IndexSearcher searcher = reader.getSearcher();
Collector collector = TopScoreDocCollector.create(newDocs.size(), true);
Weight weight = query.createWeight(searcher);
Scorer scorer = weight.scorer(reader, true, true);
collector.setScorer(scorer);
float score = 0.0f;
for(Integer d: newDocs) {
    scorer.advance(d);
    collector.collect(d);
    score = scorer.score();
    System.out.println( "doc: " + d + "; score=" + score);
    scores.add( new Float(score) );
}
return scores;
}

我在评分设置中显然缺少一些东西,但我无法从Lucene源代码中弄清楚可能是什么。

提前致谢,

基因

1 个答案:

答案 0 :(得分:0)

使用过滤器,然后执行search with that filter。然后像普通搜索一样遍历结果 - Lucene将处理过滤。

一般来说,如果您正在查看DocIds,那么您可能正在使用比您需要的更低级别的API,这会给您带来麻烦。