Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sorting Elasticsearch 7-对多字段属性的自定义字段进行排序_Sorting_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch - Fatal编程技术网 elasticsearch,Sorting,elasticsearch" /> elasticsearch,Sorting,elasticsearch" />

Sorting Elasticsearch 7-对多字段属性的自定义字段进行排序

Sorting Elasticsearch 7-对多字段属性的自定义字段进行排序,sorting,elasticsearch,Sorting,elasticsearch,我正在将工作中的系统从使用ES1升级到ES7 ES1实现的一部分包括一个自定义插件,用于添加用于自定义排序的分析器。我们的自定义排序行为类似于“自然排序”,但扩展到处理法律代码。例如,它将在1.10.1之前对1.1.1进行排序。我们一直称之为“合法的种类”。我们使用这个插件向索引中的多字段属性添加了一个额外的.legalsort字段,然后在搜索时根据这个字段进行排序 我目前正在尝试将索引和搜索的主要逻辑改编为ES7。我还没有尝试替换“合法排序”插件。在尝试对搜索执行排序时,我遇到了错误Field

我正在将工作中的系统从使用ES1升级到ES7

ES1实现的一部分包括一个自定义插件,用于添加用于自定义排序的分析器。我们的自定义排序行为类似于“自然排序”,但扩展到处理法律代码。例如,它将在
1.10.1
之前对
1.1.1
进行排序。我们一直称之为“合法的种类”。我们使用这个插件向索引中的多字段属性添加了一个额外的
.legalsort
字段,然后在搜索时根据这个字段进行排序

我目前正在尝试将索引和搜索的主要逻辑改编为ES7。我还没有尝试替换“合法排序”插件。在尝试对搜索执行排序时,我遇到了错误Fielddata在默认情况下在文本字段上被禁用。我看到的解决方案是为任何文本属性添加一个
.keyword
字段,用于排序和聚合。这“有效”,但我不知道如何应用基于
.legalsort
字段的旧排序逻辑


除了
.keyword
,还有什么方法可以对字段进行排序?它可以使用自定义分析器,就像我们在ES1中所做的那样?

重要的方面不是字段的名称(比如*.keyword),而是字段的类型。对于精确匹配搜索、排序和聚合,字段的类型应为“关键字”

如果只使用legalsort字段进行显示、排序、聚合或精确匹配,只需将类型从“text”更改为“keyword”

如果您想在两个目的中使用相同的信息,建议将其本身设置为多字段。使用“关键字”类型字段进行排序、聚合和精确匹配搜索,并使用“文本”类型字段进行全文搜索

与ES 1.0中的单一字符串类型相比,有两种类型可用于这两种目的是一个显著的改进。在ES 1.0中进行排序时,存储在反向索引中的信息必须被取消转换并保存在RAM中。此数据结构被称为fielddata。它是无边界的,通常会导致内存不足异常。更新版本的Lucene引入了另一种数据结构,它驻留在磁盘(和文件系统缓存)上,作为“fielddata”的“替代品”数据结构。它被命名为doc values,允许在不消耗大量堆RAM的情况下对大量数据进行排序。唯一的缺点是:docvalues不可用于分析文本(文本类型的字段),因此需要关键字类型的字段


您还可以将legalsort字段的映射参数“fielddata”设置为true,使此特定字段的fielddata能够恢复以前的行为及其所有缺点

我们希望“合法排序”的某些字段用于全文搜索、筛选和排序。例如,我们希望在Name属性上支持与slop的匹配,但也希望按该属性进行合法排序。更新了上面的我的答案