在 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 中对多值字段进行排序的主要内容,如果未能解决你的问题,请参考以下文章