SolrJ 从 solr 查询中获取所有结果文档的文档分数
SolrJ Getting document score of all the resulting documents from solr query
我能够使用 JAVA API SolrJ.I 获取 Solr 6.3.0 中 solr 查询的所有文档,想要一个正确的附加字段 "score"由 solr 计算(使用 tf、idf 和字段范数)对 documents.I 进行排名,我得到所有 documents.Can 的分数字段为 1.0 你帮我得到正确的 "score" 字段。
下面是我的代码片段和输出。
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.0f
)。您只是应用了一个过滤器,不会影响得分。
没有 tf/idf(但请记住,Solr 现在使用 BM25 作为默认相似性模型而不是 tf/idf)分数来计算实际查询中是否没有要匹配的标记。
我能够使用 JAVA API SolrJ.I 获取 Solr 6.3.0 中 solr 查询的所有文档,想要一个正确的附加字段 "score"由 solr 计算(使用 tf、idf 和字段范数)对 documents.I 进行排名,我得到所有 documents.Can 的分数字段为 1.0 你帮我得到正确的 "score" 字段。
下面是我的代码片段和输出。
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.0f
)。您只是应用了一个过滤器,不会影响得分。
没有 tf/idf(但请记住,Solr 现在使用 BM25 作为默认相似性模型而不是 tf/idf)分数来计算实际查询中是否没有要匹配的标记。