Solr多字段查询排序错误

时间:2013-07-14 05:24:44

标签: search solr solrj

我正在尝试在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" />

其中sint是可排序的int

我想按

排名
  1. 查询与'name'匹配
  2. 'popular'
  3. 查询与'tags'匹配。
  4. 这是我的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));
    }
    

    当我测试时,即使他们有不同的标签和受欢迎程度,我的所有文档都给出相同的分数。我不想做copyfield类型和setAddField只根据一个字段进行排序...

    这似乎是一个非常常见的问题,但我对整个网络进行了评分,并没有找到解决我问题的方法。在此先感谢您的回复! :)

1 个答案:

答案 0 :(得分: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