使用lucene发出数据库中的每个文档

时间:2012-02-14 15:43:32

标签: lucene scoring

我有一个索引,我需要使用标准搜索获取所有文档,仍然按相关性进行排名,即使文档不是命中。

我的第一个想法是添加一个始终匹配的字段,但这可能会影响相关性分数。

1 个答案:

答案 0 :(得分:2)

使用BooleanQuery将原始查询与MatchAllDocsQuery合并。通过将MatchAllDocsQuery上的提升设置为零,然后将其与主查询结合使用,可以减轻这对评分的影响。这样您就不必在索引中添加其他伪造字段。

例如:

// Parse a query by the user.
QueryParser qp = new QueryParser(Version.LUCENE_35, "text", new StandardAnalyzer());
Query standardQuery = qp.parse("User query may go here");

// Make a query that matches everything, but has no boost.
MatchAllDocsQuery matchAllDocsQuery = new MatchAllDocsQuery();
matchAllDocsQuery.setBoost(0f);

// Combine the queries.
BooleanQuery boolQuery = new BooleanQuery();
boolQuery.add(standardQuery, BooleanClause.Occur.SHOULD);
boolQuery.add(matchAllDocsQuery, BooleanClause.Occur.SHOULD);

// Now just pass it to the searcher.

这可以让你从standardQuery点击,然后是索引中的其他文档。