Elasticsearch:使用处理器对数组进行排序

Posted Elastic 中国社区官方博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Elasticsearch:使用处理器对数组进行排序相关的知识,希望对你有一定的参考价值。

如果你想知道是否可以对数组进行排序,答案是肯定的。使用 sort 处理器,我们可以按升序或降序对元素数组进行排序。对数组的元素进行升序或降序排序。 同构数字数组将按数字排序,而字符串数组或字符串+数字的异构数组将按字典顺序排序。 当字段不是数组时抛出错误。

让我们运行两个示例:字符串数组和数值数组。

数组字符串

在 array_field_to_sort 字段中,我们有值 amber、simon、back,我们将按升序排序以获得排序:amber”、back、simon。

POST /_ingest/pipeline/_simulate?verbose=true

  "pipeline": 
    "description": "sort array string",
    "processors": [
      
        "sort": 
          "field": "array_field_to_sort",
          "order": "asc"
        
      
    ]
  ,
  "docs": [
    
      "_index": "index",
      "_id": "id",
      "_source": 
        "array_field_to_sort": [
          "amber", "simon", "back"
          ]
      
    
  ]

上述命令的输出为:


  "docs": [
    
      "processor_results": [
        
          "processor_type": "sort",
          "status": "success",
          "doc": 
            "_index": "index",
            "_id": "id",
            "_version": "-3",
            "_source": 
              "array_field_to_sort": [
                "amber",
                "back",
                "simon"
              ]
            ,
            "_ingest": 
              "pipeline": "_simulate_pipeline",
              "timestamp": "2023-02-03T07:51:04.618494501Z"
            
          
        
      ]
    
  ]

从输出中,我们可以看出来字符串是安装升序来进行排列的。

数值数组

现在让我们使用一个内部数组。 元素 5、2、1、12 ,20 将按 1、2、5、12 ,20 的升序排序。

POST /_ingest/pipeline/_simulate?verbose=true

  "pipeline": 
    "description": "sort array numeric",
    "processors": [
      
        "sort": 
          "field": "array_field_to_sort",
          "order": "asc"
        
      
    ]
  ,
  "docs": [
    
      "_index": "index",
      "_id": "id",
      "_source": 
        "array_field_to_sort": [
          5,
          2,
          1,
          12,
          20
        ]
      
    
  ]

上述命令的输出为:


  "docs": [
    
      "processor_results": [
        
          "processor_type": "sort",
          "status": "success",
          "doc": 
            "_index": "index",
            "_id": "id",
            "_version": "-3",
            "_source": 
              "array_field_to_sort": [
                1,
                2,
                5,
                12,
                20
              ]
            ,
            "_ingest": 
              "pipeline": "_simulate_pipeline",
              "timestamp": "2023-02-03T07:53:13.517706963Z"
            
          
        
      ]
    
  ]

以上是关于Elasticsearch:使用处理器对数组进行排序的主要内容,如果未能解决你的问题,请参考以下文章

如何利用php数组对百万数据进行排重

Java 对已经排好序的数组进行分组。

elasticsearch插入索引文档 对数字字符串的处理

Elasticsearch系列---相关性评分算法及正排索引

Elasticsearch系列---相关性评分算法及正排索引

Elasticsearch系列---相关性评分算法及正排索引