2013-07-14 88 views
2

我想在solr上自定義多字段分數。Solr多字段查詢排序錯誤

< field name="cat" type="string" indexed="true" stored="true" required="true" multiValued="false" /> 
< field name="name" type="text_en_splitting" indexed="true" stored="true" required="true" /> 
< field name="tags" type="text_general" indexed="true" stored="true" required="true" multiValued="true" /> 
< field name="popularity" type="sint" indexed="true" stored="true" required="true" /> 
< field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" /> 

,其中燒結靶是排序INT

我想

  1. 查詢匹配 '名稱'
  2. '普及'
  3. 查詢比對與 '標籤' 行列。

這裏是我的solrj代碼:

HttpSolrServer solr = new HttpSolrServer("http://localhost:8983/solr"); 
SolrQuery query = new SolrQuery(); 
query.setQuery("National"); 

query.setFields("cat name tags popularity id score"); 
query.setStart(0); 

//boost 
query.set("defType", "edismax"); 
query.set("qf", "name^999.0 tags^2.0 popularity^-1000.0"); 
QueryResponse response = solr.query(query);   
SolrDocumentList results = response.getResults(); 

for (int i = 0; i < results.size(); ++i) { 
System.out.println(results.get(i)); 
} 

當我測試,我所有的文檔給,即使他們有不同的標籤和普及以同樣的比分。我不想做複製字段類型和setAddField只根據一個字段排序...

這似乎是一個非常普遍的問題,但我打分了整個網絡,並沒有找到解決我的問題。預先感謝回覆! :)

回答

0

首先,瞭解如何計算dismax分數,請參閱: http://searchhub.org/2010/05/23/whats-a-dismax/ 它說:score is determined by the maximum score of it’s subclauses — instead of the sum like a BooleanQuery。單個分數不會被添加,但最有可能由名稱匹配控制,這就是爲什麼所有結果都看到相同分數的原因。

另外我不確定你的意圖是popularity^-1000.0。我想你想通過popularity提高結果。

您可以使用標準的查詢分析器和嘗試是這樣的:

q={!boost popularity}name:National^999.0 OR tags:National^2.0