2017-01-14 2 views
0

Я могу получить все документы для запроса solr в Solr 6.3.0 с использованием JAVA API SolrJ. Мне нужно дополнительное поле с правильной оценкой, рассчитанное по solr (используя tf, idf и полевую норму), чтобы ранжировать документы. Я получаю поле оценки как 1.0 для всех документов. Можете ли вы помочь мне получить правильное поле «оценка».SolrJ Получение итогового документа всех полученных документов из запроса solr

Ниже приведен фрагмент кода и вывод.

 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}]} 

ответ

2

Поскольку вы не запрашивая ни за что, вы не получаете счет (каждый счет такой же, 1.0f). Вы применяете только фильтр, который не влияет на оценку.

Нет tf/idf (но помните, что Solr теперь использует BM25 в качестве модели сходства по умолчанию, а не tf/idf), чтобы вычислить, нет ли токенов для соответствия в реальном запросе.

+0

См. Edit.Наше предложение работает.Спасибо. Я принял это принятый ответ! –

Смежные вопросы