使用 man ascii 来查看 ASCII 表。

直接移动index,分片状况为红色

HelloClyde 回复了问题 • 2 人关注 • 1 个回复 • 1494 次浏览 • 2019-08-05 17:36 • 来自相关话题

Elastic认证报名问题

zqc0512 回复了问题 • 2 人关注 • 1 个回复 • 3975 次浏览 • 2019-08-05 11:02 • 来自相关话题

elasticsearch同时对多个字段聚合(两个字段值类型一致)

God_lockin 回复了问题 • 3 人关注 • 1 个回复 • 4192 次浏览 • 2019-08-03 18:20 • 来自相关话题

使用high-rest-client 6.3版本,如何创建索引模板?

fantuan 回复了问题 • 2 人关注 • 1 个回复 • 1949 次浏览 • 2019-08-06 16:02 • 来自相关话题

es path.data配置多个路径,存储的机制是什么,版本是2.4

回复

lvwendong 发起了问题 • 1 人关注 • 0 个回复 • 1787 次浏览 • 2019-08-02 09:03 • 来自相关话题

快照一直在IN_PROGRESS状态且无法删除

回复

wangxinrong 发起了问题 • 1 人关注 • 0 个回复 • 3008 次浏览 • 2019-08-01 20:22 • 来自相关话题

记一次“访问量超过1000的人数”统计,计算聚合桶的个数

ziyou 发表了文章 • 2 个评论 • 8899 次浏览 • 2019-08-01 18:45 • 来自相关话题

前言

众所周知,在ES中有各种聚合方法能够是数据分析简单、高效。但是在繁杂的聚合方法中找到满足我们需求的那个,需要我们自己去实践。下面我就说明一下“访问量超过1000的人数”统计案例的实现。

需求

ES在使用过程中,我们公司有一个需求,就是需要统计活跃用户数,我们定义活跃用户数为:今日访问量超过1000的用户,所以我们统计活跃用户数的时候需要统计“访问量超过1000的人数”。

之前的做法

第一版统计活跃用户数的方法由于对复杂的聚合统计不熟悉的原因,就把统计分为了两步。
第一步:在ES中使用字段聚合每个用户的访问数量,数量大于1000;

查询语句

json<br /> {<br /> "aggs": {<br /> "user": {<br /> "terms": {<br /> "field": "userId.keyword",<br /> "size": 10000,<br /> "order": {<br /> "_count": "desc"<br /> },<br /> "min_doc_count": "1000"<br /> }<br /> }<br /> },<br /> "size": 0,<br /> "query": {<br /> "bool": {<br /> "must": [<br /> {<br /> "range": {<br /> "startTime": {<br /> "gte": "now-4h",<br /> "lte": "now",<br /> "format": "epoch_millis"<br /> }<br /> }<br /> }<br /> ]<br /> }<br /> }<br /> }<br />

查询结果

json<br /> {<br /> "took" : 203,<br /> "timed_out" : false,<br /> "_shards" : {<br /> "total" : 1565,<br /> "successful" : 1565,<br /> "skipped" : 1520,<br /> "failed" : 0<br /> },<br /> "hits" : {<br /> "total" : 67470,<br /> "max_score" : 0.0,<br /> "hits" : [ ]<br /> },<br /> "aggregations" : {<br /> "user" : {<br /> "doc_count_error_upper_bound" : 0,<br /> "sum_other_doc_count" : 0,<br /> "buckets" : [<br /> {<br /> "key" : "admin",<br /> "doc_count" : 46998<br /> },<br /> {<br /> "key" : "nameless",<br /> "doc_count" : 8416<br /> },<br /> {<br /> "key" : "li",<br /> "doc_count" : 2486<br /> },<br /> {<br /> "key" : "liu",<br /> "doc_count" : 2183<br /> },<br /> {<br /> "key" : "111111",<br /> "doc_count" : 1281<br /> }<br /> ]<br /> }<br /> }<br /> }<br />
第二步:从ES中获取第一步的统计结果,然后统计用户桶的个数,达到统计出个数的效果。

改进后的做法

改进后就是直接使用ES的查询,使用了sum_bucket聚合,是计算每个用户的用户ID独立数,也就是每个用户的用户ID独立数都是1,然后用桶聚合求和,得到所有的人数。
参考链接:[sum bucket聚合](<a href="https://www.elastic.co/guide/en/elasticsearch/reference/6.8/search-aggregations-pipeline-sum-bucket-aggregation.html</a&gt" rel="nofollow" target="_blank">https://www.elastic.co/guide/e ... %26gt;)

查询语句

json<br /> {<br /> "aggs": {<br /> "usercount": {<br /> "sum_bucket": {<br /> "buckets_path": "usercount-bucket>usercount-metric"<br /> }<br /> },<br /> "usercount-bucket": {<br /> "terms": {<br /> "field": "userId.keyword",<br /> "size": 10,<br /> "order": {<br /> "_key": "desc"<br /> },<br /> "min_doc_count": "1000"<br /> },<br /> "aggs": {<br /> "usercount-metric": {<br /> "cardinality": {<br /> "field": "userId.keyword"<br /> }<br /> }<br /> }<br /> }<br /> },<br /> "size": 0,<br /> "query": {<br /> "bool": {<br /> "must": [<br /> {<br /> "range": {<br /> "x_st": {<br /> "gte": "now-4h",<br /> "lte": "now",<br /> "format": "epoch_millis"<br /> }<br /> }<br /> }<br /> ]<br /> }<br /> }<br /> }<br />

查询结果

json<br /> {<br /> "took" : 106,<br /> "timed_out" : false,<br /> "_shards" : {<br /> "total" : 1565,<br /> "successful" : 1565,<br /> "skipped" : 1520,<br /> "failed" : 0<br /> },<br /> "hits" : {<br /> "total" : 63956,<br /> "max_score" : 0.0,<br /> "hits" : [ ]<br /> },<br /> "aggregations" : {<br /> "usercount-bucket" : {<br /> "doc_count_error_upper_bound" : 0,<br /> "sum_other_doc_count" : 0,<br /> "buckets" : [<br /> {<br /> "key" : "nameless",<br /> "doc_count" : 8278,<br /> "usercount-metric" : {<br /> "value" : 1<br /> }<br /> },<br /> {<br /> "key" : "liu",<br /> "doc_count" : 2142,<br /> "usercount-metric" : {<br /> "value" : 1<br /> }<br /> },<br /> {<br /> "key" : "li",<br /> "doc_count" : 1928,<br /> "usercount-metric" : {<br /> "value" : 1<br /> }<br /> },<br /> {<br /> "key" : "admin",<br /> "doc_count" : 44395,<br /> "usercount-metric" : {<br /> "value" : 1<br /> }<br /> },<br /> {<br /> "key" : "111111",<br /> "doc_count" : 1281,<br /> "usercount-metric" : {<br /> "value" : 1<br /> }<br /> }<br /> ]<br /> },<br /> "usercount" : {<br /> "value" : 5.0<br /> }<br /> }<br /> }<br />

如何手动触发translog的comit操作?

zqc0512 回复了问题 • 3 人关注 • 1 个回复 • 2549 次浏览 • 2019-08-02 08:53 • 来自相关话题

elasticsearch是否能进行众数聚合

fantuan 回复了问题 • 3 人关注 • 2 个回复 • 1879 次浏览 • 2019-08-02 16:46 • 来自相关话题

elasticsearch配置文件里两项解释

God_lockin 回复了问题 • 4 人关注 • 2 个回复 • 11728 次浏览 • 2019-08-03 22:32 • 来自相关话题

es持续压测,内存占用过大

fantuan 回复了问题 • 4 人关注 • 2 个回复 • 2571 次浏览 • 2019-07-31 19:21 • 来自相关话题

请教多对多的数据过滤问题

bellengao 回复了问题 • 2 人关注 • 1 个回复 • 1004 次浏览 • 2019-07-31 17:04 • 来自相关话题

ES6.8权限使用配置

ziyou 发表了文章 • 0 个评论 • 10660 次浏览 • 2019-07-31 10:50 • 来自相关话题


概述
ES的权限控制一直ES使用中的一个问题,因为官方之前一直未免费安全性功能。公司要不选择使用其他插件来解决,要不就是只在内网使用。现在在ES6.8及以后版本ES将部分安全性功能免费开放了, 现在我们就6.8版本的【基于角色的访问控制】进行操作、验证。
1、下载安装ELK6.8版本(此处省略)
ES在6.8以后发布的版本才有(7.0是发布在6.8之前的)
2、修改ES配置文件 elasticsearch.yml
在配置文件中添加:
xpack.security.enabled: true
基础版本的安全性功能是默认关闭的。
然后启动ES
./elasticsearch -d
3、设置内置用户密码
参考:内置用户
./bin/elasticsearch-setup-passwords interactive
这里设置的密码要记住,后面会使用到。我们设置简单的密码:123456(密码不能少于6位)
如果是Windows请使用CMD命令行执行
按照提示设置内置用户密码
4、设置kibana用户名密码
在kibana的配置文件kibana.yml里面添加
elasticsearch.username: "kibana"
elasticsearch.password: "123456"
5、然后启动kibana
启动kibana就可以使用用户名与密码进行访问。

Image.png


6、设置logstash用户名和密码
打开配置文件conf,在output中的elasticsearch中添加user、password
例:
output {
elasticsearch {
hosts => ["10.68.24.136:9200","10.68.24.137:9200"]
index => "%{[indexName]}-%{+YYYY.MM.dd}"
user => "logstash_system"
password => "123456"
}

能否根据聚合结果更新?

xjh199002 回复了问题 • 2 人关注 • 2 个回复 • 1206 次浏览 • 2019-07-31 21:06 • 来自相关话题

elasticsearch利用script获取nested类型数据并计算怎么实现?

laoyang360 回复了问题 • 5 人关注 • 2 个回复 • 8317 次浏览 • 2019-07-30 21:29 • 来自相关话题