使用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中,您可以使用查询“:”从索引中检索所有文档和所有字段。