SolrJ从solr查询获取所有结果文档的文档分数

时间:2017-01-14 16:57:21

标签: java elasticsearch solr solrj tf-idf

我可以使用JAVA API SolrJ在Solr 6.3.0中获取solr查询的所有文档。我想要一个由solr(使用tf,idf和field norm)计算的正确“得分”的附加字段来排名这些文件。我得到的所有文件的得分字段都是1.0。你可以帮我找到正确的“得分”字段。

以下是我的代码段和输出。

        String urlString = "http://localhost:8983/solr/mycore2";
        SolrClient solr = new HttpSolrClient.Builder(urlString).build();
        SolrQuery query = new SolrQuery();
        query.setQuery( "*" );
        query.set("fl", "id,house,postcode,score");
        String s="house=".concat(address.getHouseNumber().getCoveredText());
        query.addFilterQuery(s);
        QueryResponse resp = solr.query(query);
        SolrDocumentList list = resp.getResults();

        if(list!=null)
        {
            System.out.println(list.toString());
        }

输出

{numFound=4,start=0,maxScore=1.0,docs=[SolrDocument{id=1, house=[150-151], postcode=[641044], score=1.0}, SolrDocument{id=2, house=[150/151], postcode=[641044], score=1.0}, SolrDocument{id=3, house=[151/150], postcode=[641044], score=1.0}, SolrDocument{id=4, house=[151/150], postcode=[641044], score=1.0}]}

修改 在MatsLindh的建议之后,这里是调整后的代码和输出。

String urlString = "http://localhost:8983/solr/mycore2";
        SolrClient solr = new HttpSolrClient.Builder(urlString).build();
        SolrQuery query = new SolrQuery();
        query.setQuery(address.getHouseNumber().getCoveredText().concat(" ").concat(address.getPostcode().getCoveredText()));
        query.set("fl", "id,house,postcode,score");
        QueryResponse resp = solr.query(query);
        SolrDocumentList list = resp.getResults();
        if(list!=null)
        {
            System.out.println(list.toString());
        }

输出

{numFound=3,start=0,maxScore=2.4800222,docs=[SolrDocument{id=6, house=[34], postcode=[641006], score=2.4800222}, SolrDocument{id=5, house=[34], postcode=[641005], score=1.2400111}, SolrDocument{id=7, house=[2-11A], postcode=[641006], score=1.1138368}]}

1 个答案:

答案 0 :(得分:2)

由于您没有查询任何内容,因此您无法获得分数(每个分数都相同,1.0f)。您只应用过滤器,但不会影响得分。

没有tf / idf(但请记住Solr现在使用BM25作为默认的相似性模型,而不是tf / idf)得分来计算在实际查询中是否没有匹配的标记。