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

时间:2012-01-30 05:10:34

标签: java search sorting solr solrj

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

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

所以,例如:结果将是

  1. 得分为0.325
  2. 的数据集
  3. 得分为0.282
  4. 的数据集
  5. 得分为0.200
  6. 的数据集
  7. 得分为0.298
  8. 的项目
  9. 得分为0.186
  10. 的项目
  11. 得分为0.360
  12. 的小组
  13. 得分为0.270
  14. 的小组

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

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

    提前致谢, -Jake。

1 个答案:

答案 0 :(得分:6)

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

solrQuery.addSortField("field1", ORDER.desc);
solrQuery.addSortField("field2", ORDER.desc);

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