我需要按相关性对从 SOLR 返回的方面进行排序

Posted

技术标签:

【中文标题】我需要按相关性对从 SOLR 返回的方面进行排序【英文标题】:I need to sort the facets that come back from SOLR by relevancy 【发布时间】:2011-02-20 13:03:12 【问题描述】:

我的 SOLR 索引歌曲对象中有属于更高级别的专辑对象。示例如下:

<song>
<album title>Blood Sugar Sex Magic</album title>
<song title>Under the Bridge</song title>
<description>A sad song about junkies</description>
</song>

我现在可以做的是在专辑标题上创建一个构面,以便搜索歌曲时也会显示哪些专辑包含该关键字的热门歌曲。

SOLR 的默认行为是按点击次数从高到低的顺序显示构面。但是,我想要实现的是要根据该专辑的热门歌曲的相关性对构面列表进行排序。

例如,对“sad”一词的搜索可能会显示“Blood Sugar Sex Magic”的一个热门歌曲,并且可能还有一张名为“Sad Clown song”的专辑,其中有 10 个热门歌曲。 “悲伤的小丑歌曲”将作为第一个方面显示,即使“桥下”可能是最相关的歌曲。

我的问题是我如何才能恢复所有方面,然后根据其中歌曲的相关性对它们进行排序?如果我需要更改或扩展一些底层 SOLR 代码,那会是什么?

提前致谢。

【问题讨论】:

【参考方案1】:

Solr 只能按字典顺序或按计数对构面进行排序(请参阅facet.sort parameter)。

如果您想实现不同的排序顺序,我将从 SimpleFacets class 开始。

【讨论】:

【参考方案2】:

最后,我们决定在不需要修改 SOLR 源代码的情况下执行此操作的最简单方法是查询 solr,询问构面,然后遍历结果。

不理想,但目前可以使用。

【讨论】:

【参考方案3】:

您可以使用 Edismax 执行搜索查询,并使用结果分组按特定字段进行分组,在您提到专辑标题的情况下。

https://lucene.apache.org/solr/guide/7_0/result-grouping.html

https://lucene.apache.org/solr/guide/7_0/the-extended-dismax-query-parser.html

【讨论】:

以上是关于我需要按相关性对从 SOLR 返回的方面进行排序的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SOLR 中按日期排序?

Drupal 方面相关性排序 - 将 Solr 查询运算符从“AND”更改为“OR”?

Solr - 按多值字段上的OR搜索的最大匹配对结果进行排序

Apache Solr 中的相关性反馈

如何对从 XML 解析的对象进行排序

在 Solr 中按特定顺序按多个字段排序