2

我需要根据两个因素对从 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 以实体名称为前缀,所以我打算使用它。

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

在此先感谢,-杰克。

4

1 回答 1

7

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

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

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

于 2012-01-30T08:06:41.140 回答