2

我正在尝试在 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. 查询匹配“名称”
  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 只基于一个字段排序...

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

4

1 回答 1

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

于 2013-07-14T16:58:03.027 回答