Home PC Games Linux Windows Database Network Programming Server Mobile  
           
  Home \ Server \ Elasticsearch 2.20 Beginners: aggregation     - The basic principles for the protection of a good linux server security (Linux)

- How to deploy Icinga server (Server)

- Service Discovery: Zookeeper vs etcd vs Consul (Server)

- Linux Network Programming --epoll model Detailed principles and examples (Programming)

- Linux SU command security Suggestions (Linux)

- Linux variable learning experience (Linux)

- Common data structures and functions of Linux process scheduling (Programming)

- Transfer files and permissions from Windows to Linux system by Samba (Linux)

- Linux Getting Started tutorial: How to backup Linux systems (Linux)

- MySQL + Corosync + Pacemaker + DRBD build highly available MySQL (Server)

- How to force Linux users to change the initial password the first time you log in (Linux)

- Linux basic introductory tutorial ---- Software Installation under Linux (Linux)

- Linux maximum number of threads and limit the number of queries the current thread (Linux)

- MogileFS system installation configuration example (Server)

- How to configure a server in a MySQL Cluster (Database)

- Bash How to read a file line by line (Programming)

- GNU Linux use diff to generate a patch with the patch (Linux)

- GCC and gfortran write MEX program (Matlab2012a) under Ubuntu 14.04 (Programming)

- MongoDB, Cassandra, HBase transaction design strategy (Database)

- GitLab issued Merge Request return error 500 when the two solutions log (Linux)

 
         
  Elasticsearch 2.20 Beginners: aggregation
     
  Add Date : 2018-11-21      
         
         
         
  Polymerization (Aggregations) provides the ability to group and statistical documents. Similar polymerization relational database group by grouping functions in Elasticsearch in which the primary aggregate query can get the specific results of the polymerization are polymerized Again, this is a very useful feature. You can get the results many times by one operation of the polymerization, thus avoiding repeated requests, to reduce the burden on the network and servers.

Polymerization (Aggregations) provides the ability to group and statistical documents. Similar polymerization relational database group by grouping functions in Elasticsearch in which the primary aggregate query can get the specific results of the polymerization are polymerized Again, this is a very useful feature. You can get the results many times by one operation of the polymerization, thus avoiding repeated requests, to reduce the burden on the network and servers.

Data Preparation: We insert a few data:

Request: POST localhost:9200/customer/external/?pretty

parameter:

{ "Name": "secisland", "age": 25, "state": "open", "gender": "woman", "balance": 87}

{ "Name": "zhangsan", "age": 32, "state": "close", "gender": "man", "balance": 95}

{ "Name": "zhangsan1", "age": 33, "state": "close", "gender": "man", "balance": 91}

{ "Name": "lisi", "age": 34, "state": "open", "gender": "woman", "balance": 99}

{ "Name": "wangwu", "age": 46, "state": "close", "gender": "woman", "balance": 78}

Wherein the insert 5 as the test data.

Once we have data aggregation test:

Example: all customers grouped by status, then return to the top 10 (the default), press statistics (also the default) Sort:

Request: POST http: // localhost: 9200 / customer / _search pretty?

parameter:

{
  "Size": 0,
  "Aggs": {
    "Group_by_state": {
      "Terms": {
        "Field": "state"
      }
    }
  }
}

This condition is similar to the query in a relational database group by:
SELECT state, COUNT (*) FROM customer GROUP BY state ORDER BY COUNT (*) DESC

Return:

  {
  "Took": 1,
  "Timed_out": false,
  "_shards": {
    "Total": 5,
    "Successful": 5,
    "Failed": 0
  },
  "Hits": {
    "Total": 5,
    "Max_score": 0.0,
    "Hits": []
  },
  "Aggregations": {
    "Group_by_state": {
      "Doc_count_error_upper_bound": 0,
      "Sum_other_doc_count": 0,
      "Buckets": [{
        "Key": "close",
        "Doc_count": 3
      }, {
        "Key": "open",
        "Doc_count": 2
      }]
    }
  }
}

We can be seen, there are two close states customers, users two open states.

Here we are again on the basis of the above increase is a function of the state, while the statistical average balance is calculated for each state.

Request and just the same, but the parameters have changed, consider the following parameters:

{
  "Size": 0,
  "Aggs": {
    "Group_by_state": {
      "Terms": {
        "Field": "state"
      },
      "Aggs": {
        "Average_balance": {
          "Avg": {
            "Field": "balance"
          }
        }
      }
    }
  }
}

Results obtained are as follows:

{
  "Took": 16,
  "Timed_out": false,
  "_shards": {
    "Total": 5,
    "Successful": 5,
    "Failed": 0
  },
  "Hits": {
    "Total": 5,
    "Max_score": 0.0,
    "Hits": []
  },
  "Aggregations": {
    "Group_by_state": {
      "Doc_count_error_upper_bound": 0,
      "Sum_other_doc_count": 0,
      "Buckets": [{
        "Key": "close",
        "Doc_count": 3,
        "Average_balance": {
          "Value": 88.0
        }
      }, {
        "Key": "open",
        "Doc_count": 2,
        "Average_balance": {
          "Value": 93.0
        }
      }]
    }
  }
}

Look carefully at how the nested average_balance gathered in group_by_state ACCUMULATION. This is a common pattern polymerization. Any field can be aggregated to get the results we want again after polymerization.

Look at the following example, we obtain the results of the above-average amount of accounts again in descending order:

Request the same as before:

parameter:

{
  "Size": 0,
  "Aggs": {
    "Group_by_state": {
      "Terms": {
        "Field": "state",
        "Order": {
          "Average_balance": "desc"
        }
      },
      "Aggs": {
        "Average_balance": {
          "Avg": {
            "Field": "balance"
          }
        }
      }
    }
  }
}

Results obtained:

{
  "Took": 1,
  "Timed_out": false,
  "_shards": {
    "Total": 5,
    "Successful": 5,
    "Failed": 0
  },
  "Hits": {
    "Total": 5,
    "Max_score": 0.0,
    "Hits": []
  },
  "Aggregations": {
    "Group_by_state": {
      "Doc_count_error_upper_bound": 0,
      "Sum_other_doc_count": 0,
      "Buckets": [{
        "Key": "open",
        "Doc_count": 2,
        "Average_balance": {
          "Value": 93.0
        }
      }, {
        "Key": "close",
        "Doc_count": 3,
        "Average_balance": {
          "Value": 88.0
        }
      }]
    }
  }
}

This article by the Mosaic Rand (secisland) original, reproduced, please indicate the author and source.

The following example is more complex: demonstrates how age group (ages 20-29, 30-39, 40-49), and then through sex, and finally get every age group, the average account balance each sex:

{
  "Size": 0,
  "Aggs": {
    "Group_by_age": {
      "Range": {
        "Field": "age",
        "Ranges": [
          {
            "From": 20,
            "To": 30
          },
          {
            "From": 30,
            "To": 40
          },
          {
            "From": 40,
            "To": 50
          }
        ]
      },
      "Aggs": {
        "Group_by_gender": {
          "Terms": {
            "Field": "gender"
          },
          "Aggs": {
            "Average_balance": {
              "Avg": {
                "Field": "balance"
              }
            }
          }
        }
      }
    }
  }
}

Check out the return:

{
  "Took": 15,
  "Timed_out": false,
  "_shards": {
    "Total": 5,
    "Successful": 5,
    "Failed": 0
  },
  "Hits": {
    "Total": 5,
    "Max_score": 0.0,
    "Hits": []
  },
  "Aggregations": {
    "Group_by_age": {
      "Buckets": [{
        "Key": "20.0-30.0",
        "From": 20.0,
        "From_as_string": "20.0",
        "To": 30.0,
        "To_as_string": "30.0",
        "Doc_count": 1,
        "Group_by_gender": {
          "Doc_count_error_upper_bound": 0,
          "Sum_other_doc_count": 0,
          "Buckets": [{
            "Key": "woman",
            "Doc_count": 1,
            "Average_balance": {
              "Value": 87.0
            }
          }]
        }
      }, {
        "Key": "30.0-40.0",
        "From": 30.0,
        "From_as_string": "30.0",
        "To": 40.0,
        "To_as_string": "40.0",
        "Doc_count": 3,
        "Group_by_gender": {
          "Doc_count_error_upper_bound": 0,
          "Sum_other_doc_count": 0,
          "Buckets": [{
            "Key": "man",
            "Doc_count": 2,
            "Average_balance": {
              "Value": 93.0
            }
          }, {
            "Key": "woman",
            "Doc_count": 1,
            "Average_balance": {
              "Value": 99.0
            }
          }]
        }
      }, {
        "Key": "40.0-50.0",
        "From": 40.0,
        "From_as_string": "40.0",
        "To": 50.0,
        "To_as_string": "50.0",
        "Doc_count": 1,
        "Group_by_gender": {
          "Doc_count_error_upper_bound": 0,
          "Sum_other_doc_count": 0,
          "Buckets": [{
            "Key": "woman",
            "Doc_count": 1,
            "Average_balance": {
              "Value": 78.0
            }
          }]
        }
      }]
    }
  }
}

As can be seen from the above examples, Elasticsearch aggregation capability is very powerful.
     
         
         
         
  More:      
 
- Vim configuration instructions (Linux)
- The file name is garbled or deleted files with special characters under Linux (Linux)
- The Concept and Semantics of Java Memory Model (Programming)
- Large computer network security policy Experience (Linux)
- Virtualization and IT cooperation (Linux)
- Compile and install Redis and register as a system service under RedHat5.8 environment (Database)
- Oracle 12c detailing the new features (Database)
- Expert advice: Do not use the computer security IE browser (Linux)
- Python variable type (Programming)
- Oracle Standby Redo Log experiment (Database)
- Python regular expressions: how to use regular expressions (Programming)
- CentOS 6.6 compile and install phpMyAdmin configuration PostgreSQL9.4.1 (Database)
- Virtual Judge structures under Ubuntu 14.04 (Server)
- Depth understanding of JavaScript new mechanism (Programming)
- C ++ sequence containers basics summary (Programming)
- Linux iptables: basic principles and rules (Linux)
- 20 Advanced Java interview questions summary (Programming)
- The minimum initial use of the Linux operating system RancherOS feelings (Linux)
- Oracle 12c of the auto-increment Identity Columns (Database)
- Oracle Linux 5.5 (64bit) Install Oracle 11gR2 RAC detailed tutorial (Database)
     
           
     
  CopyRight 2002-2022 newfreesoft.com, All Rights Reserved.