Elasticsearch 入门

主要概念与mysql对比

 

对于HTTP方法,具体作用

HTTP方法操作说明
GET 获取请求对象的当前状态
POST 改变对象的当前状态
PUT 创建一个对象
DELETE 销毁对象
HEAD   请求获取对象的基础信息

增删改查

以下在Kibana的Dev Tools里执行

PUT /account/info/1
{
    "price": 10000,
    "color": "红色",
    "make": "汉兰达",
    "sold": "2014-10-28"
}

删除id=4的记录

DELETE /account/info/1

删不了/settle/jingyi

删settle索引

DELETE /account

POST /account/info/1/_update
{
"doc": {"color": "黑色"}
}

GET /account/int/1

批量插入

POST /account/info/_bulk
{ "index": {}}
{ "price" : 20000, "color" : "红色", "make" : "汉兰达", "sold" : "2014-11-05" }
{ "index": {}}
{ "price" : 30000, "color" : "绿色", "make" : "福特", "sold" : "2014-05-18" }
{ "index": {}}
{ "price" : 15000, "color" : "蓝色", "make" : "丰田", "sold" : "2014-07-02" }
{ "index": {}}
{ "price" : 12000, "color" : "绿色", "make" : "丰田", "sold" : "2014-08-19" }
{ "index": {}}
{ "price" : 20000, "color" : "红色", "make" : "汉兰达", "sold" : "2014-11-05" }
{ "index": {}}
{ "price" : 80000, "color" : "红色", "make" : "宝马", "sold" : "2014-01-01" }
{ "index": {}}
{ "price" : 25000, "color" : "蓝色", "make" : "福特", "sold" : "2014-02-12" }

怎么获取单条记录呢?

统计应用

统计每种颜色的数量

类似mysql语句: select color, count(*)  from info group by color;

GET account/info/_search
{
    "size": 0,           【3】
    "aggs": {            【1】
      "SalesNum": {      【2】
        "terms": {       【4】
          "field": "color.keyword",
          "size": 10
        }
      }
    }
}

注释

【1】:如果想要进行统计分析,统计代码需要写在aggs中,aggs是aggregations 的简称,也可以写作 aggregations。

【2】:是指定的列的名称,作用同SQLSERVER统计中as 重命名。

【3】:这里设置了返回值为0,因为这个查询不仅仅返回了我们的统计的内容,还返回了搜索结果的内容,这里我们并不需要搜索结果的内容,所以设置为0.

【4】:这里定义了桶的类型,如果需要不同的统计内容,这些需要使用不同的统计类型。

结果

{
  "took" : 21,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : 8,
    "max_score" : 0.0,
    "hits" : [ ]
  },
  "aggregations" : {
    "SalesNum" : {
      "doc_count_error_upper_bound" : 0,
      "sum_other_doc_count" : 0,
      "buckets" : [
        {
          "key" : "红色",
          "doc_count" : 3
        },
        {
          "key" : "绿色",
          "doc_count" : 2
        },
        {
          "key" : "蓝色",
          "doc_count" : 2
        },
        {
          "key" : "黑色",
          "doc_count" : 1
        }
      ]
    }
  }
}

统计每种颜色的平均价格

类似mysql: select color, avg(price) from info group by color;

GET account/info/_search
{
  "size": 0,
  "aggs": {
    "s": {
      "terms": {
        "field": "color.keyword",
        "size": 10
      },
      "aggs": {
        "avg_price": {
          "avg": {
            "field": "price"
          }
        }
      }
    }
  }
}

结果

{
  "took" : 13,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : 8,
    "max_score" : 0.0,
    "hits" : [ ]
  },
  "aggregations" : {
    "s" : {
      "doc_count_error_upper_bound" : 0,
      "sum_other_doc_count" : 0,
      "buckets" : [
        {
          "key" : "红色",
          "doc_count" : 3,
          "avg_price" : {
            "value" : 40000.0
          }
        },
        {
          "key" : "绿色",
          "doc_count" : 2,
          "avg_price" : {
            "value" : 21000.0
          }
        },
        {
          "key" : "蓝色",
          "doc_count" : 2,
          "avg_price" : {
            "value" : 20000.0
          }
        },
        {
          "key" : "黑色",
          "doc_count" : 1,
          "avg_price" : {
            "value" : 10000.0
          }
        }
      ]
    }
  }
}

统计每一个企业品牌的最低价格和最高价格

类似mysql 语句: select make, min(price), max(price) from info group by make;

GET account/info/_search
{
  "size": 0
  ,"aggs": {
    "make": {
      "terms": {
        "field": "make.keyword"
      },
      "aggs": {
        "price_age": {
          "avg": {
            "field": "price"
          }
        },
        "min_price": {
          "min": {
            "field": "price"
          }
        },
        "max_price":{
          "max": {
            "field": "price"
          }
        }
      }
    }
  }
}

结果

{
  "took" : 3,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : 8,
    "max_score" : 0.0,
    "hits" : [ ]
  },
  "aggregations" : {
    "make" : {
      "doc_count_error_upper_bound" : 0,
      "sum_other_doc_count" : 0,
      "buckets" : [
        {
          "key" : "汉兰达",
          "doc_count" : 3,
          "max_price" : {
            "value" : 20000.0
          },
          "min_price" : {
            "value" : 10000.0
          },
          "price_age" : {
            "value" : 16666.666666666668
          }
        },
        {
          "key" : "丰田",
          "doc_count" : 2,
          "max_price" : {
            "value" : 15000.0
          },
          "min_price" : {
            "value" : 12000.0
          },
          "price_age" : {
            "value" : 13500.0
          }
        },
        {
          "key" : "福特",
          "doc_count" : 2,
          "max_price" : {
            "value" : 30000.0
          },
          "min_price" : {
            "value" : 25000.0
          },
          "price_age" : {
            "value" : 27500.0
          }
        },
        {
          "key" : "宝马",
          "doc_count" : 1,
          "max_price" : {
            "value" : 80000.0
          },
          "min_price" : {
            "value" : 80000.0
          },
          "price_age" : {
            "value" : 80000.0
          }
        }
      ]
    }
  }
}

参考

https://www.cnblogs.com/Rawls/p/10316689.html

原文地址:https://www.cnblogs.com/kaituorensheng/p/12499975.html