【问题标题】:Sorting solr search results using multiple fields (solrj)使用多个字段对 solr 搜索结果进行排序 (solrj)
【发布时间】:2012-01-30 05:10:34
【问题描述】:

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

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

提前致谢, -杰克。

【问题讨论】:

    标签: java search sorting solr solrj


    【解决方案1】:

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

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

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

    【讨论】:

    • 嘿 javanna,我实际上使用与您答案的第二部分非常相似的解决方案解决了这个问题。我最初使用'setSortField',但后来将它们都更改为'addSortField',但似乎并没有解决问题。最后,我使用索引时间提升来提高某些文档的分数(SolrInputDocument.setDocumentBoost(boostValue)。这样我就可以按分数排序,当用户搜索时它们以正确的顺序出现!为您的输入干杯。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多