我需要根据两个因素对从apache solr返回的结果进行排序:
我们的系统中有三个实体由solr(组,项目和数据集)索引,在结果中我希望首先显示数据集,然后是项目,然后是组;但我仍然希望它尊重每种类型的得分值。
所以,例如:结果将是
我在 java 中使用 solrj 来构建solr查询。问题是,当我尝试向SolrQuery对象添加2个排序字段时,它似乎只使用其中一个。同样在solr文档中,没有任何内容可以说明实体类型,但是文档的ID以实体名称为前缀,所以我打算使用它。
如果有人对如何实现这一点有任何想法,我会非常感激,因为我已经坚持了一段时间了!
提前致谢, -Jake。
答案 0 :(得分:6)
如果看起来solrj只使用其中一个排序字段,那么您可能正在使用SolrQuery#setSortField
方法而不是addSortField
这样:
solrQuery.addSortField("field1", ORDER.desc);
solrQuery.addSortField("field2", ORDER.desc);
为了按照您的描述对结果进行排序,更简洁的解决方案是在索引中添加一个字段,其中包含一种基于实体类型的权重。然后,您可以使用该字段直接排序:weight desc, score desc
。在此之前,只需确保权重总是胜过solr得分,否则你应该努力影响solr得分。