es 数组类型求和排序

1.准备测试索引( es 版本6)

PUT array_value_test
{
  "mappings": {
    "_doc": {
      "properties": {
        "num": {
          "type": "long"
        }
      }
    }
  }
}

2.PUT 测试数据

POST _bulk
{ "index" : { "_index" : "array_value_test", "_type" : "_doc", "_id" : "1" } }
{ "num" : [0,1] }
{ "index" : { "_index" : "array_value_test", "_type" : "_doc", "_id" : "2" } }
{ "num" : [1,1] }
{ "index" : { "_index" : "array_value_test", "_type" : "_doc", "_id" : "3" } }
{ "num" : [0,1] }
{ "index" : { "_index" : "array_value_test", "_type" : "_doc", "_id" : "4" } }
{ "num" : [0,1,2] }
{ "index" : { "_index" : "array_value_test", "_type" : "_doc", "_id" : "5" } }
{ "num" : [1,1,2] }
{ "index" : { "_index" : "array_value_test", "_type" : "_doc", "_id" : "6" } }
{ "num" : [1,1,0] }
{ "index" : { "_index" : "array_value_test", "_type" : "_doc", "_id" : "7" } }
{ "num" : [3] }

3.排序测试(直接降序排)

GET array_value_test/_search
{
  "sort": [
    {
      "num": {
        "order": "desc"
      }
    }
  ]
}

4.结果,可以看到,默认降序排序是以数组中最大值来进行排序的

{
  "took" : 4,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : 7,
    "max_score" : null,
    "hits" : [
      {
        "_index" : "array_value_test",
        "_type" : "_doc",
        "_id" : "7",
        "_score" : null,
        "_source" : {
          "num" : [
            3
          ]
        },
        "sort" : [
          3
        ]
      },
      {
        "_index" : "array_value_test",
        "_type" : "_doc",
        "_id" : "5",
        "_score" : null,
        "_source" : {
          "num" : [
            1,
            1,
            2
          ]
        },
        "sort" : [
          2
        ]
      },
      {
        "_index" : "array_value_test",
        "_type" : "_doc",
        "_id" : "4",
        "_score" : null,
        "_source" : {
          "num" : [
            0,
            1,
            2
          ]
        },
        "sort" : [
          2
        ]
      },
      {
        "_index" : "array_value_test",
        "_type" : "_doc",
        "_id" : "2",
        "_score" : null,
        "_source" : {
          "num" : [
            1,
            1
          ]
        },
        "sort" : [
          1
        ]
      },
      {
        "_index" : "array_value_test",
        "_type" : "_doc",
        "_id" : "6",
        "_score" : null,
        "_source" : {
          "num" : [
            1,
            1,
            0
          ]
        },
        "sort" : [
          1
        ]
      },
      {
        "_index" : "array_value_test",
        "_type" : "_doc",
        "_id" : "1",
        "_score" : null,
        "_source" : {
          "num" : [
            0,
            1
          ]
        },
        "sort" : [
          1
        ]
      },
      {
        "_index" : "array_value_test",
        "_type" : "_doc",
        "_id" : "3",
        "_score" : null,
        "_source" : {
          "num" : [
            0,
            1
          ]
        },
        "sort" : [
          1
        ]
      }
    ]
  }
}

现在,直接看官网有哪些模式es 排序

 最后一行说了,默认升序是以数组中最小的值来排序,降序是以数组中最大值来排序。

然后我们看到,还有三种排序模式,求和,均值和中位数。OK,我们试下效果。

1.求和

GET array_value_test/_search
{
  "sort": [
    {
      "num": {
        "order": "desc",
        "mode": "sum"
      }
    }
  ]
}

结果

{
  "took" : 3,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : 7,
    "max_score" : null,
    "hits" : [
      {
        "_index" : "array_value_test",
        "_type" : "_doc",
        "_id" : "5",
        "_score" : null,
        "_source" : {
          "num" : [
            1,
            1,
            2
          ]
        },
        "sort" : [
          4
        ]
      },
      {
        "_index" : "array_value_test",
        "_type" : "_doc",
        "_id" : "4",
        "_score" : null,
        "_source" : {
          "num" : [
            0,
            1,
            2
          ]
        },
        "sort" : [
          3
        ]
      },
      {
        "_index" : "array_value_test",
        "_type" : "_doc",
        "_id" : "7",
        "_score" : null,
        "_source" : {
          "num" : [
            3
          ]
        },
        "sort" : [
          3
        ]
      },
      {
        "_index" : "array_value_test",
        "_type" : "_doc",
        "_id" : "2",
        "_score" : null,
        "_source" : {
          "num" : [
            1,
            1
          ]
        },
        "sort" : [
          2
        ]
      },
      {
        "_index" : "array_value_test",
        "_type" : "_doc",
        "_id" : "6",
        "_score" : null,
        "_source" : {
          "num" : [
            1,
            1,
            0
          ]
        },
        "sort" : [
          2
        ]
      },
      {
        "_index" : "array_value_test",
        "_type" : "_doc",
        "_id" : "1",
        "_score" : null,
        "_source" : {
          "num" : [
            0,
            1
          ]
        },
        "sort" : [
          1
        ]
      },
      {
        "_index" : "array_value_test",
        "_type" : "_doc",
        "_id" : "3",
        "_score" : null,
        "_source" : {
          "num" : [
            0,
            1
          ]
        },
        "sort" : [
          1
        ]
      }
    ]
  }
}

2 均值

GET array_value_test/_search
{
  "sort": [
    {
      "num": {
        "order": "desc",
        "mode": "avg"
      }
    }
  ]
}

 结果

{
  "took" : 4,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : 7,
    "max_score" : null,
    "hits" : [
      {
        "_index" : "array_value_test",
        "_type" : "_doc",
        "_id" : "7",
        "_score" : null,
        "_source" : {
          "num" : [
            3
          ]
        },
        "sort" : [
          3
        ]
      },
      {
        "_index" : "array_value_test",
        "_type" : "_doc",
        "_id" : "5",
        "_score" : null,
        "_source" : {
          "num" : [
            1,
            1,
            2
          ]
        },
        "sort" : [
          1
        ]
      },
      {
        "_index" : "array_value_test",
        "_type" : "_doc",
        "_id" : "2",
        "_score" : null,
        "_source" : {
          "num" : [
            1,
            1
          ]
        },
        "sort" : [
          1
        ]
      },
      {
        "_index" : "array_value_test",
        "_type" : "_doc",
        "_id" : "4",
        "_score" : null,
        "_source" : {
          "num" : [
            0,
            1,
            2
          ]
        },
        "sort" : [
          1
        ]
      },
      {
        "_index" : "array_value_test",
        "_type" : "_doc",
        "_id" : "6",
        "_score" : null,
        "_source" : {
          "num" : [
            1,
            1,
            0
          ]
        },
        "sort" : [
          1
        ]
      },
      {
        "_index" : "array_value_test",
        "_type" : "_doc",
        "_id" : "1",
        "_score" : null,
        "_source" : {
          "num" : [
            0,
            1
          ]
        },
        "sort" : [
          1
        ]
      },
      {
        "_index" : "array_value_test",
        "_type" : "_doc",
        "_id" : "3",
        "_score" : null,
        "_source" : {
          "num" : [
            0,
            1
          ]
        },
        "sort" : [
          1
        ]
      }
    ]
  }
}

3 中位数

GET array_value_test/_search
{
  "sort": [
    {
      "num": {
        "order": "desc",
        "mode": "median"
      }
    }
  ]
}

 结果

{
  "took" : 5,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : 7,
    "max_score" : null,
    "hits" : [
      {
        "_index" : "array_value_test",
        "_type" : "_doc",
        "_id" : "7",
        "_score" : null,
        "_source" : {
          "num" : [
            3
          ]
        },
        "sort" : [
          3
        ]
      },
      {
        "_index" : "array_value_test",
        "_type" : "_doc",
        "_id" : "5",
        "_score" : null,
        "_source" : {
          "num" : [
            1,
            1,
            2
          ]
        },
        "sort" : [
          1
        ]
      },
      {
        "_index" : "array_value_test",
        "_type" : "_doc",
        "_id" : "2",
        "_score" : null,
        "_source" : {
          "num" : [
            1,
            1
          ]
        },
        "sort" : [
          1
        ]
      },
      {
        "_index" : "array_value_test",
        "_type" : "_doc",
        "_id" : "4",
        "_score" : null,
        "_source" : {
          "num" : [
            0,
            1,
            2
          ]
        },
        "sort" : [
          1
        ]
      },
      {
        "_index" : "array_value_test",
        "_type" : "_doc",
        "_id" : "6",
        "_score" : null,
        "_source" : {
          "num" : [
            1,
            1,
            0
          ]
        },
        "sort" : [
          1
        ]
      },
      {
        "_index" : "array_value_test",
        "_type" : "_doc",
        "_id" : "1",
        "_score" : null,
        "_source" : {
          "num" : [
            0,
            1
          ]
        },
        "sort" : [
          1
        ]
      },
      {
        "_index" : "array_value_test",
        "_type" : "_doc",
        "_id" : "3",
        "_score" : null,
        "_source" : {
          "num" : [
            0,
            1
          ]
        },
        "sort" : [
          1
        ]
      }
    ]
  }
}

好啦,结束,主页旁边的2022也不是空白了😄

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值