ElasticSearch根本应用姿态二

本文作为elasticsearch 根本应用姿态第二篇,蕴含以下内容

  • 查问指定字段
  • 限度返回条数
  • 分页查问
  • 分组查问
  • 高亮
  • 主动补全提醒
  • 排序
  • 返回后果聚合,如统计文档数,某个field value的求和、平均值等
更多相干知识点请查看: * ElasticSearch 根本应用姿态 - 一灰灰Blog
<!-- more -->

0. 数据筹备

初始化一个索引,写入一些测试数据

post second-index/_doc{  "@timestamp": "2021-06-10 08:08:08",  "url": "/test",  "execute": {    "args": "id=10&age=20",    "cost": 10,    "res": "test result"  },  "response_code": 200,  "app": "yhh_demo"}post second-index/_doc{  "@timestamp": "2021-06-10 08:08:09",  "url": "/test",  "execute": {    "args": "id=20&age=20",    "cost": 11,    "res": "test result2"  },  "response_code": 200,  "app": "yhh_demo"}post second-index/_doc{  "@timestamp": "2021-06-10 08:08:10",  "url": "/test",  "execute": {    "args": "id=10&age=20",    "cost": 12,    "res": "test result2"  },  "response_code": 200,  "app": "yhh_demo"}post second-index/_doc{  "@timestamp": "2021-06-10 08:08:09",  "url": "/hello",  "execute": {    "args": "tip=welcome",    "cost": 2,    "res": "welcome"  },  "response_code": 200,  "app": "yhh_demo"}post second-index/_doc{  "@timestamp": "2021-06-10 08:08:09",  "url": "/404",  "execute": {    "args": "tip=welcome",    "cost": 2,    "res": "xxxxxxxx"  },  "response_code": 404,  "app": "yhh_demo"}

1. 查问指定字段

比方我当初只关怀url返回的状态码, 次要借助_source来指定须要查问的字段,查问的语法和之前介绍的统一

GET second-index/_search{  "_source": [    "url",    "response_code"  ],  "query": {    "match_all": {}  }}

2. 返回条数限度

针对返回后果条数进行限度,属于比拟常见的case了,在es中,间接通过size来指定

GET second-index/_search{  "query": {    "match_all": {}  },  "size": 2}

3. 分页查问

通过size限度返回的文档数,通过from来实现分页

GET second-index/_search{  "query": {    "match_all": {}  },  "size": 1,  "from": 1}

(留神上面输入截图,与下面的比照,这里返回的是第二条数据)

4. 分组查问

相当于sql中的group by,罕用于聚合操作中的统计计数的场景

在es中,应用aggs来实现,语法如下

"aggs": {    "agg-name": { // 这个agg-name 是自定义的聚合名称        "terms": { // 这个terms示意聚合的策略,依据 field进行分组            "field": "",            "size": 10        }    }}

比方咱们心愿依据url统计拜访计数,对应的查问能够是

GET second-index/_search{  "query": {    "match_all": {}  },  "size": 1,   "aggs": {    "my-agg": {      "terms": {        "field": "url",        "size": 2      }    }  }}

然而在执行时,会发现并不能失常响应

左边返回的提示信息为Text fields are not optimised for operations that require per-document field data like aggregations and sorting, so these operations are disabled by default. Please use a keyword field instead. Alternatively, set fielddata=true on [url] in order to load field data by uninverting the inverted index. Note that this can use significant memory这个异样

简略来说,就是url这个字段为text类型,默认状况下这种类型的不走索引,不反对聚合排序,如果须要则须要设置fielddata=true,或者应用url的分词url.keyword

GET second-index/_search{  "query": {    "match_all": {}  },  "size": 1,   "aggs": {    "my-agg": {      "terms": {        "field": "url.keyword",        "size": 2      }    }  }}

留神

  • 尽管咱们更重视的是分组后的后果,然而hits中仍然会返回命中的文档,若是只想要分组后的统计后果,能够在查问条件中增加 size:0
  • 聚合操作和查问条件是能够组合的,如只查问某个url对应的计数
GET second-index/_search{  "query": {    "term": {      "url.keyword": {        "value": "/test"      }    }  },  "size": 1,   "aggs": {    "my-agg": {      "terms": {        "field": "url.keyword",        "size": 2      }    }  }}

下面介绍了TEXT类型的field,依据分词进行聚合操作;还有一种形式就是设置fielddata=true,操作姿态如下

PUT second-index/_mapping{  "properties": {    "url": {      "type": "text",      "fielddata": true    }  }}

批改结束之后,再依据url进行分组查问,就不会抛异样了

5. 全文搜寻

  • 211018-ElasticSearch全文搜寻反对配置 - 一灰灰Blog

通过配置一个动静索引模板,将所有的field构建一个用于全文检索的field,从而实现全文搜寻

6. 聚合操作

下面的分组也算是聚合操作中的一种,接下来认真看一下es的聚合,能够反对哪些货色

聚合语法:

"aggs": {    "agg_name": { // 自定义聚合名        "agg_type": { // agg_type聚合类型, 如 min, max            "agg_body" // 要操作的计算值        },         "meta": {},         "aggregations": {} // 子聚合查问    }}

从聚合分类来看,能够划分为上面几种

  • Metric Aggregation: 指标剖析聚合
  • Bucket Aggregation: 分桶聚合
  • Pipeline: 管道剖析类型
  • Matrix: 矩阵剖析类型

5.1 Metric Aggregation: 指标剖析聚合

常见的有 min, max, avg, sum, cardinality, value count

通常是值查问一些须要通过计算获取到的值

上面别离给出一些演示阐明

5.1.1 min最小值

获取申请耗时最小的case

GET second-index/_search{  "size": 0,  "aggs": {    "min_cost": {      "min": {        "field": "execute.cost"      }    }  }}
  • size: 0 示意不须要返回原数据
  • min_cost: 自定义的聚合名
  • min: 示意聚合类型,为取最小值
  • "field": "execute.cost": 示意取的是Field: execute.cost的最小值

5.1.2 max 最大值

根本同上,上面中贴出申请代码,截图就省略掉了

GET second-index/_search{  "size": 0,  "aggs": {    "max_cost": {      "max": {        "field": "execute.cost"      }    }  }}
5.1.3 sum 求和
GET second-index/_search{  "size": 0,  "aggs": {    "sum_cost": {      "sum": {        "field": "execute.cost"      }    }  }}
5.1.4 avg平均值

在监控均匀耗时的统计中,这个还是比拟能体现服务的整体性能的

GET second-index/_search{  "size": 0,  "aggs": {    "avg_cost": {      "avg": {        "field": "execute.cost"      }    }  }}
5.1.5 cardinality 去重统计计数

这个等同于咱们常见的 distinct count 留神与前面的 value count 统计所有有值的文档数量之间的区别

GET second-index/_search{  "_source": "url",   "aggs": {    "cardinality_cost": {      "cardinality": {        "field": "url"      }    }  }}

去重统计url的计数,如下图,能够看到返回统计后果为3,然而理论的文档数有5个

5.1.6 value count 计数统计

文档数量统计,区别于下面的去重统计,这里返回的是全量

GET second-index/_search{  "size": 0,   "aggs": {    "count_cost": {      "value_count": {        "field": "url"      }    }  }}

输入后果配合cardinality的返回,做一个比照能够增强了解

5.1.7 stats 多值计算

一个stats 能够返回下面min,max,sum...等的计算值

GET second-index/_search{  "size": 0,   "aggs": {    "mult_cost": {      "stats": {        "field": "execute.cost"      }    }  }}

5.1.8 extended_stats 多值扩大

在下面stats的根底上进行扩大,反对方差,标准差等返回

GET second-index/_search{  "size": 0,   "aggs": {    "mult_cost": {      "extended_stats": {        "field": "execute.cost"      }    }  }}

5.1.9 percentile 百分位数统计
用于统计 xx% 的记录值,小于等于左边

如上面截图,可知 99%的记录,耗时小于12

默认的百分比区间是: [1, 45, 25, 50, 75, 95, 99], 能够手动批改

GET second-index/_search{  "size": 0,   "aggs": {    "agg_cost": {      "percentiles": {        "field": "execute.cost",        "percents": [          10,          50,          90,          99        ]      }    }  }}
5.1.10 percentile rank统计值所在的区间

下面用于统计不同区间的占比,比方公司的人员年龄散布;而这一个则是我想晓得18岁的我,在哪个占比里

GET second-index/_search{  "size": 0,   "aggs": {    "agg_cost": {      "percentile_ranks": {        "field": "execute.cost",        "values": [6, 9]      }    }  }}

相干博文

ElasticSearch:aggregations 聚合详解

Elasticsearch 聚合剖析深刻学习

Elasticsearch: 权威指南-聚合

一灰灰的联系方式

尽信书则不如无书,以上内容,纯属一家之言,因集体能力无限,不免有疏漏和谬误之处,如发现bug或者有更好的倡议,欢送批评指正,不吝感谢

  • 集体站点:https://blog.hhui.top
  • 微博地址: 小灰灰Blog
  • QQ: 一灰灰/3302797840
  • 微信公众号:一灰灰blog