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

2024-04-15

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

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

提前致谢, -杰克。


如果 solrj 看起来只使用其中一个排序字段,也许您正在使用SolrQuery#setSortField http://lucene.apache.org/solr/4_10_4/solr-solrj/org/apache/solr/client/solrj/SolrQuery.html#setSortField%28java.lang.String,%20org.apache.solr.client.solrj.SolrQuery.ORDER%29方法而不是addSortField http://lucene.apache.org/solr/4_10_4/solr-solrj/org/apache/solr/client/solrj/SolrQuery.html#addSortField%28java.lang.String,%20org.apache.solr.client.solrj.SolrQuery.ORDER%29像这样:

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用多个字段对 solr 搜索结果进行排序 (solrj) 的相关文章

随机推荐