在 Solr 中对多值字段进行排序
Sorting on multivalued field in Solr
我知道 Solr 不支持多值字段排序。但是有什么方法可以在 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 中实现这一点。什么是最简单的方法?
如果 this issue 已实施,您可以直接使用它,如票证描述中所述。但目前还没有。
因此,您可以做的另一件事是索引一个非多值的附加字段 min_code
,并将 custom_code
的最小值放在那里。您可以在客户端或 Solr 中的 UpdateRequestProcessor 中执行此操作。
然后你只需按 min_code
排序
创建一个复制域,将多值数据的内容复制到已排序的不带逗号的串联单值中,并将其用于排序。
例如:
文档 1:
多值数据:11、78、45、22
sortedConcatenatedSingleValue : 11224578
文档 2:
多值数据:56、74、62、10
sortedConcatenatedSingleValue : 10566274
如果在从源生成数据时无法创建此单值字段,则可以在索引期间使用脚本转换器 (https://wiki.apache.org/solr/DataImportHandler#ScriptTransformer) 使用 [=29= 创建此 sortedConcatenatedSingleValue 字段] 函数。
您可以在 5.3 中开箱即用 - https://issues.apache.org/jira/browse/SOLR-2522
这里有一个很好的描述 - https://lucidworks.com/blog/2015/09/10/minmax-on-multivalued-field/
我知道 Solr 不支持多值字段排序。但是有什么方法可以在 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 中实现这一点。什么是最简单的方法?
如果 this issue 已实施,您可以直接使用它,如票证描述中所述。但目前还没有。
因此,您可以做的另一件事是索引一个非多值的附加字段 min_code
,并将 custom_code
的最小值放在那里。您可以在客户端或 Solr 中的 UpdateRequestProcessor 中执行此操作。
然后你只需按 min_code
创建一个复制域,将多值数据的内容复制到已排序的不带逗号的串联单值中,并将其用于排序。
例如:
文档 1:
多值数据:11、78、45、22
sortedConcatenatedSingleValue : 11224578
文档 2:
多值数据:56、74、62、10
sortedConcatenatedSingleValue : 10566274
如果在从源生成数据时无法创建此单值字段,则可以在索引期间使用脚本转换器 (https://wiki.apache.org/solr/DataImportHandler#ScriptTransformer) 使用 [=29= 创建此 sortedConcatenatedSingleValue 字段] 函数。
您可以在 5.3 中开箱即用 - https://issues.apache.org/jira/browse/SOLR-2522
这里有一个很好的描述 - https://lucidworks.com/blog/2015/09/10/minmax-on-multivalued-field/