我想使用特定字段对 solr 的前 100 个文档进行排序,但它对整个结果集进行排序,然后显示结果 以下是我的代码。
query1.setQuery(" Natural Language ");
query1.setStart(0);
query1.setRows(100);
int i=0;
query1.set("df","Text");
query1.setFields("PaperID","TotalPageRank");
query1.setSort("customrank", SolrQuery.ORDER.desc);
是否可以使用 solr 查询使用自定义排名字段对前 100 个文档进行排序?
您可以尝试使用查询重新排名功能。这允许您发出一个查询,检索前 N 个条目,然后根据第二个查询对这些条目重新排名。这通常用于在对这些条目应用昂贵的查询以进行重新排名之前让一个简单的查询限制文档总数,但用例似乎足够相似。
文档页面上示例的改编版本可能是这样的(我无法对此进行测试,因此请为您的用例添加带有调整的注释):
rq={!rerank reRankQuery=$rqq reRankDocs=100 reRankWeight=3}&rqq=_val_=customrank
您可能需要调整重新排名权重才能让您的自定义排名对最终分数做出更多贡献,因为我认为您无法明确排序
这很简单。
SolrQuery query1 = new SolrQuery();
CommonsHttpSolrServer server = new CommonsHttpSolrServer("Your server url");
server.getHttpClient().getParams();
query1.setQuery("Natural Language");
query1.setFields("PaperID", "TotalPageRank");
query1.setStart(0);
query1.setRows(100);
query1.setSort("customrank", SolrQuery.ORDER.desc);
QueryResponse solrresponse = server.query(query1);
SolrDocumentList results = solrresponse.getResults();
for (int i = 0; i < results.size(); ++i) {
String resultsolr = results.get(i).toString();
}
注意:自定义排名字段应该是整数,最好有customrank_i
希望这会有所帮助!!快乐的编码:)