作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在Elastic search中,我试图过滤给定日期范围内出勤率超过80%的员工。
模型是
{
userId_ids:1,
可用天数:[“2019-05-10”,“2019-05-11”,“2019-05-12”,......,“2019-12-30”]
}
可用天数可以是5年数据,并且需要在“2019-01-01”-“2019-12-30”日期范围内获取所有可用性超过80%的员工
最佳答案
我提出了以下解决方案,其中利用了以下提到的聚合查询。注意查询的树结构,这将有助于理解父级/同级聚合。
Range Query
Terms Aggregation
Cardinality Aggregation on date field
Top Hits Aggregation (to retrieve the document)
Bucket Selector Aggregation
1st-Jan-2019 to 10th-Jan-2019
返回出勤率大于或等于80%的员工的
列表,即仅返回 10天。POST <your_index_name>/_search
{
"size": 0,
"query":{
"range": {
"availabilityDates": {
"gte": "2019-01-01",
"lte": "2019-01-10"
}
}
},
"aggs":{
"student":{
"terms":{
"field":"userId.keyword"
},
"aggs":{
"count_dates_attendance":{
"cardinality":{
"field":"availabilityDates"
}
},
"hits": {
"top_hits": {
"size": 10 <---- Returns only 10 students. Change to see more students
}
},
"myfinal":{
"bucket_selector":{
"buckets_path":{
"attendanceCount":"count_dates_attendance"
},
"script": {
"params": {
"count_days": 10 <----- Change this to 365 if your range is for an entire year
},
"inline": "params.attendanceCount/params.count_days >= 0.8"
}
}
}
}
}
}
}
count_days
。我添加了10,因为这是我在查询中使用的范围。关于elasticsearch - 使用 Elasticsearch 如何过滤日期范围内出勤率超过80%的员工,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56070686/
我是一名优秀的程序员,十分优秀!