elasticsearch 字段折叠

概要:字段折叠其实就是聚合,不过在es中字段折叠是单独一个模块,聚合也是一个模块,在某些时候两者可以实现同样的功能,字段折叠是简单的聚合,而聚合aggs则是一个大模块,里面有更多更详细的各种聚合功能。本文只说字段折叠,不讲解agg模块,感兴趣的话你可以去官网。

  1. 字段折叠:

GET cdr-2018-12*/_search
{
    "query": {
      "bool": {
        "must": [
          {"range": {
            "hold_time": {
              "gt": 0
            }
          }}
        ]
      }
    },
    "collapse" : {
        "field" : "machine_id" 
    },
    "sort": [{"start_time":"desc"}], 
    "size": 1000
}

#默认情况下,collapse字段折叠,取出的是聚合组中最小的一条数据,如果需要最大的那一条数据,可以用sort来排序。查询结果如下:
{
  "took" : 38963,
  "timed_out" : false,
  "_shards" : {
    "total" : 30,
    "successful" : 30,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 10000,
      "relation" : "gte"
    },
    "max_score" : null,
    "hits" : [
      {
        "_index" : "cdr-2018-12-20",
        "_type" : "_doc",
        "_id" : "HbQigm4BAv3kTLdZH-xL",
        "_score" : null,
        "_routing" : "5862855",
        "_source" : {
          "calledtogateway" : "33321258845862855",
          "called7" : "5862855",
          "machine_id" : "d0ef978dbd4842ba85dfa954570f8ca4",
          "hold_time" : 44,
          "call_ip_province" : "南非",
          "called9" : "845862855",
          "softswitchd_name" : "MBX3000|18a69",
          "start_time" : "2018-12-31 23:57:47",
          "called_ip_province" : "美国",
          "fee_prefix" : "33#25884",
          "callere164" : "27653079406",
          "callerproduct_id" : "TS-v4.6.0-18",
          "customer_name" : "DIASPORA"
        },
        "fields" : {
          "machine_id" : [
            "d0ef978dbd4842ba85dfa954570f8ca4"
          ]
        },
        "sort" : [
          1546300667000
        ]
      },
      {
        "_index" : "cdr-2018-12-20",
        "_type" : "_doc",
        "_id" : "d3BVo24BZpgDzq3xFsk_",
        "_score" : null,
        "_routing" : "0564174",
        "_source" : {
         
          "calledtogateway" : "61450564174",
          "called7" : "0564174",
          "machine_id" : "61892ec7343907f201e172a1562f2f6d",
          "hold_time" : 11,
          "call_ip_province" : "德国",
          "called9" : "450564174",
          "softswitchd_name" : "MBX3000|2c1e629",
          "start_time" : "2018-12-31 23:14:41",
          "called_ip_province" : "澳大利亚",
          "fee_prefix" : "00019614",
          "callere164" : "Sudarshan2121",
          "customer_name" : "Welcoserver"
        },
        "fields" : {
          "machine_id" : [
            "61892ec7343907f201e172a1562f2f6d"
          ]
        },
        "sort" : [
          1546298081000
        ]
      }
}
#_source中取出来的是聚合组中的一条数据,fields字段是聚合的字段,sort值是当前排序的值

 2.字段折叠取出组中多条数据

GET cdr-2018-12-10/_search
{
    "query": {
      "bool": {
        "must": [
          {"range": {
            "hold_time": {
              "gt": 0
            }
          }}
        ]
      }
    },
    "collapse" : {
        "field" : "machine_id" ,
        "inner_hits": {
      "name": "pg",
      "size": 2,
      "sort": [
        {
          "start_time": "desc"
        }
      ]
    }
    },
    "sort": [{"start_time":"desc"}], 
    "size": 5
}
#只需要在内部加上inner_hits,  name是自定义的名字,
结果如下:

{
  "took" : 1024,
  "timed_out" : false,
  "_shards" : {
    "total" : 10,
    "successful" : 10,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 10000,
      "relation" : "gte"
    },
    "max_score" : null,
    "hits" : [
      {
        "_index" : "cdr-2018-12-10",
        "_type" : "_doc",
        "_id" : "H6RRo24BAv3kTLdZCbOq",
        "_score" : null,
        "_routing" : "5632186",
        "_source" : {
          "machine_id" : "61892ec7343907f201e172a1562f2f6d",
          "hold_time" : 5,
          "call_ip_province" : "英国",
          "called9" : "265632186",
          "softswitchd_name" : "MBX3000|2acd5b6",
          "start_time" : "2018-12-19 23:59:58",
          "called_ip_province" : "澳大利亚",
          "fee_prefix" : "0001961",
          "callere164" : "Arman1",
          "customer_name" : "Welcoserver"
        },
        "fields" : {
          "machine_id" : [
            "61892ec7343907f201e172a1562f2f6d"
          ]
        },
        "sort" : [
          1545263998000
        ],
        "inner_hits" : {
          "pg" : {
            "hits" : {
              "total" : {
                "value" : 10000,
                "relation" : "gte"
              },
              "max_score" : null,
              "hits" : [
                {
                  "_index" : "cdr-2018-12-10",
                  "_type" : "_doc",
                  "_id" : "H6RRo24BAv3kTLdZCbOq",
                  "_score" : null,
                  "_routing" : "5632186",
                  "_source" : {
                    "machine_id" : "61892ec7343907f201e172a1562f2f6d",
                    "hold_time" : 5,
                    "call_ip_province" : "英国",
                    "start_time" : "2018-12-19 23:59:58",
                    "called_ip_province" : "澳大利亚",
                    "fee_prefix" : "0001961",
                    "callere164" : "Arman1",
                    "customer_name" : "Welcoserver"
                  },
                  "sort" : [
                    1545263998000
                  ]
                },
                {
                  "_index" : "cdr-2018-12-10",
                  "_type" : "_doc",
                  "_id" : "HKRRo24BAv3kTLdZCbOq",
                  "_score" : null,
                  "_routing" : "9955369",
                  "_source" : {
                    "machine_id" : "61892ec7343907f201e172a1562f2f6d",
                    "hold_time" : 4,
                    "call_ip_province" : "英国",
                    "called9" : "359955369",
                    "softswitchd_name" : "MBX3000|2acd59b",
                    "start_time" : "2018-12-19 23:59:58",
                    "called_ip_province" : "澳大利亚",
                    "fee_prefix" : "0001961",
                    "callere164" : "61396895258",
                    "customer_name" : "Welcoserver"
                  },
                  "sort" : [
                    1545263998000
                  ]
                }
              ]
            }
          }
        }
      },
{
        "_index" : "cdr-2018-12-10",
        "_type" : "_doc",
        "_id" : "T9vTfG4BBXMgK0EA3uqX",
        "_score" : null,
        "_routing" : "4395682",
        "_source" : {
          "machine_id" : "a7488aa0084cbf15542c1b0267b42d4",
          "hold_time" : 12,
          "call_ip_province" : "美国",
          "called9" : "644395682",
          "start_time" : "2018-12-19 23:59:57",
          "called_ip_province" : "法国",
          "fee_prefix" : "778801",
          "callere164" : "17baginamasud",
          "customer_name" : "amjad=vai"
        },
        "fields" : {
          "machine_id" : [
            "a7488aa0084cbf15542c1b0267b42d4e"
          ]
        },
        "sort" : [
          1545263997000
        ],
        "inner_hits" : {
          "pg" : {
            "hits" : {
              "total" : {
                "value" : 10000,
                "relation" : "gte"
              },
              "max_score" : null,
              "hits" : [
                {
                  "_index" : "cdr-2018-12-10",
                  "_type" : "_doc",
                  "_id" : "T9vTfG4BBXMgK0EA3uqX",
                  "_score" : null,
                  "_routing" : "4395682",
                  "_source" : {
                    "machine_id" : "a7488aa0084cbf15542c1b0267b42d4e",
                    "hold_time" : 12,
                    "call_ip_province" : "美国",
                    "called9" : "644395682",
                    "softswitchd_name" : "MBX3000|5351ce8",
                    "start_time" : "2018-12-19 23:59:57",
                    "called_ip_province" : "法国",
                    "fee_prefix" : "778801",
                    "callere164" : "17baginamasud",
                    "customer_name" : "amjad=vai"
                  },
                  "sort" : [
                    1545263997000
                  ]
                },
                {
                  "_index" : "cdr-2018-12-10",
                  "_type" : "_doc",
                  "_id" : "TtvTfG4BBXMgK0EA3uqX",
                  "_score" : null,
                  "_routing" : "2455869",
                  "_source" : {
                    "machine_id" : "a7488aa0084cbf15542c1b0267b42d4e",
                    "hold_time" : 22,
                    "call_ip_province" : "法国",
                    "called9" : "872455869",
                    "softswitchd_name" : "MBX3000|5351ce5",
                    "start_time" : "2018-12-19 23:59:45",
                    "called_ip_province" : "法国",
                    "fee_prefix" : "228801",
                    "callere164" : "122122",
                    "callerproduct_id" : "VOS3000 V2.1.4.0",
                    "customer_name" : "zahintel"
                  },
                  "sort" : [
                    1545263985000
                  ]
                }
              ]
            }
          }
        }
      }

 

你可能感兴趣的:(es)