使用多个字段对solr搜索结果进行排序(solrj)

use*_*342 2 java sorting search solr solrj

我需要根据两个因素对从apache solr返回的结果进行排序:

我们的系统中有三个实体由solr(组,项目和数据集)索引,在结果中我希望首先显示数据集,然后是项目,然后是组; 但我仍然希望它尊重每种类型的得分值.

因此,例如:结果将是

  1. 数据集得分为0.325
  2. 数据集得分为0.282
  3. 数据集得分为0.200
  4. 项目得分为0.298
  5. 项目得分为0.186
  6. 分数为0.360的组
  7. 分数为0.270的组

我在java中这样做并使用solrj来构造solr查询.问题是,当我尝试向SolrQuery对象添加2个排序字段时,它似乎只使用其中一个.同样在solr文档中,没有任何内容可以说明实体类型,但是文档的ID以实体名称为前缀,所以我打算使用它.

如果有人对如何实现这一点有任何想法,我将非常感激,因为我已经坚持了一段时间了!

提前谢谢,-Jake.

jav*_*nna 6

如果看起来solrj只使用其中一个排序字段,那么你可能正在使用这个SolrQuery#setSortField方法,而不是addSortField像这样:

solrQuery.addSortField("field1", ORDER.desc);
solrQuery.addSortField("field2", ORDER.desc);
Run Code Online (Sandbox Code Playgroud)

为了按照您的描述对结果进行排序,更简洁的解决方案是在索引中添加一个字段,其中包含一种基于实体类型的权重.然后你可以直接使用该字段排序:weight desc, score desc.在此之前,只需确保权重总是胜过solr得分,否则你应该努力影响solr得分.