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

使用lucene发出数据库中的每个文档,lucene,scoring,Lucene,Scoring,我有一个索引,我需要通过标准搜索获得所有文档,仍然按照相关性排序,即使一个文档没有成功 我的第一个想法是添加一个始终匹配的字段,但这可能会使相关性得分变形。使用布尔查询将原始查询与匹配文档查询相结合。通过将MatchAllDocsQuery上的boost设置为零,然后再将其与主查询组合,可以减轻这对评分的影响。这样,您就不必向索引中添加其他虚假字段 例如: // Parse a query by the user. QueryParser qp = new QueryParser(Version

我有一个索引,我需要通过标准搜索获得所有文档,仍然按照相关性排序,即使一个文档没有成功


我的第一个想法是添加一个始终匹配的字段,但这可能会使相关性得分变形。

使用
布尔查询
将原始查询与
匹配文档查询
相结合。通过将
MatchAllDocsQuery
上的boost设置为零,然后再将其与主查询组合,可以减轻这对评分的影响。这样,您就不必向索引中添加其他虚假字段

例如:

// 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
的点击,然后是索引中的其余文档。

您能否澄清您是否需要按某种程度排序所有文档?如果是这样,您可以使用IndexReader打开索引并循环遍历documents集合。在Solr中,您可以使用查询“:”从索引中检索所有文档和所有字段。