ES的基本知识与基本查询总结

ES的基本知识与基本查询总结

概要

ES是个分布式的文档存储系统。通过JSON序列化来存储复杂的数据信息。在集群环境中,你能够立刻从集群的任意节点获取到你想要的数据。

当你去检索一个被索引的document,它能在1s内给你响应。

index、document的对应关系

存储类型
ES index document indices(index集合)
MYSQL DB tables 数据库实例

检索和分析

检索

通过ES提供的restful接口去请求获取到相关的数据信息。也可以通过DSL 查询来做复杂的聚合查询得到结果。

数据分析

ES的聚合查询不仅仅是帮助你大海捞针,它还会告诉你其他的信息

  1. 数据量大小
  2. 平均的数据长度
  3. 数据的平均长度,是否按某一类型分类
  4. 某段时间的数据增加量

ES的高可用和可扩展性

这是怎么工作的?实际上,Elasticsearch索引只是一个或多个物理分片(shard)的逻辑分组,其中每个碎片实际上是一个独立的索引。通过将索引中的文档分布在多个碎片上,并将这些分片(shard)分布在多个节点上,Elasticsearch可以确保冗余,这既可以防止硬件故障,又可以在节点添加到集群时增加查询容量。当集群增长(或收缩)时,Elasticsearch会自动迁移分片(shard)以重新平衡集群。

分片(shard)有两种类型:原始分片(shard)和复制分片(shard)。索引中的每个文档都属于一个主分片。副本碎片是主碎片的副本。副本提供数据的冗余副本,以防止硬件故障,并增加服务读请求(如搜索或检索文档)的容量。

GET START

检索

简单查询

http://192.168.243.8:9200/sentinel/sentinel_metrics/_search?pretty
{
  "took" : 2,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 167,
      "relation" : "eq"
    },
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "sentinel",
        "_type" : "sentinel_metrics",
        "_id" : "1588222865023",
        "_score" : 1.0,
        "_source" : {
          "id" : 1588222865023,
          "gmtCreate" : "2020-04-30T05:01:04.889Z",
          "gmtModified" : "2020-04-30T05:01:04.889Z",
          "app" : "service-mall-user",
          "timestamp" : "2020-04-30T05:00:59.000Z",
          "resource" : "cn.com.service.emp.api.EmpDubboService",
          "passQps" : 1,
          "successQps" : 1,
          "blockQps" : 0,
          "exceptionQps" : 0,
          "rt" : 126.0,
          "count" : 1,
          "resourceCode" : -1860573111
        }
      },
      ...
    ]

返回信息的具体含义:

  • took – 查询话费的时间
  • timed_out – 查询是否超时
  • _shards – 搜索了多少碎片,并对成功、失败或跳过的碎片进行了细分。
  • max_score – 找到的最相关文档的分数
  • hits.total.value - 匹配的document数
  • hits.sort - 文档的排序位置(不按相关性分数排序时)
  • hits._score - 文档的相关性分数(使用“全部匹配”时不适用)

分页查询

查询10-19的数据信息

http://192.168.243.8:9200/sentinel/sentinel_metrics/_search?pretty
{
  "query": { "match_all": {} },
  "sort": [
    { "gmtCreate": "asc" }
  ],
  "from": 10,
  "size": 10
}

按条件查询

match (全匹配)

查询document = sentinel_metrics并且字段app=service-mall-user所有字段信息

http://192.168.243.8:9200/sentinel/sentinel_metrics/_search?pretty
{
  "query": { 
    "match": {
        "app":"service-mall-user"
        } },
  "sort": [
    { "gmtCreate": "asc" }
  ],
  "from": 10,
  "size": 10
}

match_phrase (包含,模糊查询)

查询document = sentinel_metrics并且字段app like %service-mall-user%所有字段信息

http://192.168.243.8:9200/sentinel/sentinel_metrics/_search?pretty
{
  "query": { 
    "match_phrase": {
        "app":"service"
        } },
  "sort": [
    { "gmtCreate": "asc" }
  ],
  "from": 10,
  "size": 10
}

组合条件查询

要构造更复杂的查询,可以使用bool查询组合多个查询条件。您可以根据需要(must)、需要(must_not)或不需要(必须不匹配)指定条件。

匹配 "app":"service-mall-user" 并且不是 rt < 0 的记录信息

http://192.168.243.8:9200/sentinel/sentinel_metrics/_search?pretty
{
  "bool": {
      "must":[
        {
           "match":{
             "app":"service-mall-user" 
           }
        }
      ],
      "most_not":[
        {
            "range":{
             "rt":{
                 "lt": 0
             }
           }
        }
      ]
  }
  
}

通过范围过滤

http://192.168.243.8:9200/sentinel/sentinel_metrics/_search?pretty
{
  "bool": {
      "must":[
        {
           "match":{
             "app":"service-mall-user" 
           }
        }
      ],
      "filter":[
        {
            "range":{
             "passQps":{
                 "gte": 1,
                 "lt": 10
             }
           }
        }
      ]
  }
  
  "from": 10,
  "size": 10
}

聚合查询(groupBy)

根据字段app聚合查询,返回十个结果信息 ;group_by_app group_by_字段

http://192.168.240.10:9200/sentinel/sentinel_metric/_search
{
  "size": 10,
  "aggs": {
    "group_by_app": {
      "terms": {
        "field": "app.keyword"
      }
    }
  }
}

聚合结果再聚合

{
  "size": 0,
  "aggs": {
    "group_by_app": {
      "terms": {
        "field": "app.keyword"
      },
      "aggs": {
	  	"average_rt":{
	  		"avg":{
	  			"field":"rt"
	  		}
	  	}
	  }
    }
    
  }
  
}

结果
{
    "took": 922,
    "timed_out": false,
    "_shards": {
        "total": 5,
        "successful": 5,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": 33,
        "max_score": 0.0,
        "hits": []
    },
    "aggregations": {
        "group_by_app": {
            "doc_count_error_upper_bound": 0,
            "sum_other_doc_count": 0,
            "buckets": [
                {
                    "key": "service-mall-user",
                    "doc_count": 33,
                    "average_rt": {
                        "value": 22.87878787878788
                    }
                }
            ]
        }
    }
}
posted @ 2020-05-01 21:50  Ronaldo7  阅读(530)  评论(0编辑  收藏  举报