在 Solr 中对多值字段进行排序

Posted

技术标签:

【中文标题】在 Solr 中对多值字段进行排序【英文标题】:Sorting on multivalued field in Solr 【发布时间】:2015-05-12 06:46:12 【问题描述】:

我知道 Solr 不支持多值字段排序。但是有什么方法可以。我有两个带有字段 custom_code 的文档,值如下,

文件 1:11、78、45、22

文档 2:56、74、62、10

当我按升序排序时,顺序应该是,

文档 2:56、74、62、10

文档 1:11、78、45、22

这里 Doc 2 将首先出现,因为它具有最小的元素 10(大于 doc 1 的 11)。

我们如何在 Solr 中实现这一点。最简单的方法是什么?

【问题讨论】:

在 Solr 中无法对多值字段进行排序。请参考***.com/questions/20806935/…***.com/questions/8492251/… 【参考方案1】:

创建一个copyfield,将多值数据的内容复制成一个无逗号的已排序串联单值,并用于排序。

例如:

文件 1:

多值数据:11、78、45、22

sortedConcatenatedSingleValue : 11224578

文件 2:

多值数据:56、74、62、10

sortedConcatenatedSingleValue : 10566274

如果您无法在从源生成数据时创建此单值字段,那么您可以在索引期间使用脚本转换器 (https://wiki.apache.org/solr/DataImportHandler#ScriptTransformer) 使用 javascript 函数创建此 sortedConcatenatedSingleValue 字段。

【讨论】:

【参考方案2】:

如果实现了this issue,您可以直接使用它,如票证说明中所述。但目前还没有。

因此,您可以做的另一件事是索引一个附加字段min_code,非多值并将custom_code 的最小值放在那里。您可以在客户端或 Solr 中的 UpdateRequestProcessor 中执行此操作。 然后你就按min_code排序

【讨论】:

我需要决定两个文档中最小值相同的方法,然后在这种情况下,我需要立即比较下一个更高的值。我计划将所有值作为单个排序的字符串格式存储在单独的字段中,并且在排序时我将使用这个排序的字符串字段进行排序。【参考方案3】:

您可以在 5.3 中开箱即用 - https://issues.apache.org/jira/browse/SOLR-2522

这里有一个很好的描述 - https://lucidworks.com/blog/2015/09/10/minmax-on-multivalued-field/

【讨论】:

以上是关于在 Solr 中对多值字段进行排序的主要内容,如果未能解决你的问题,请参考以下文章

将 Solr 重复值删除到多值字段中

CSV 中返回的 Solr 多值字段

Spring data solr 总是创建多值字段

复制多对多值

solr 通过配置多值字段动态字段来解决文本表达式查询精确到句子的问题

solr 通过配置多值字段动态字段来解决文本表达式查询精确到句子的问题20171214