如何根据特定字段对solr查询的前100个结果进行排序?

时间:2017-11-06 05:59:24

标签: solr solrj

我想使用特定字段对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查询使用customrank字段对前100个文档进行排序?

2 个答案:

答案 0 :(得分:1)

这很简单..

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字段应该是整数,最好是customrank_i

希望这会有所帮助!!快乐的编码:)

答案 1 :(得分:0)

您可以尝试使用Query Re-Ranking feature。这允许您发出一个查询,检索前N个条目,然后根据第二个查询重新排列这些条目。这通常用于在将一个昂贵的查询应用于这些条目以进行重新排名之前,有一个简单的查询限制文档总数,但用例看起来足够相似。

文档页面上的示例的改编版本可能类似于(我无法对此进行测试,因此添加注释并对您的用例进行调整):

rq={!rerank reRankQuery=$rqq reRankDocs=100 reRankWeight=3}&rqq=_val_=customrank

您可能需要调整重新调整以让您的自定义搜索为最终得分做出更多贡献,因为我认为您无法明确排序