居然是你

求助大佬,研究了2天没有写出来的查询语句╥﹏╥...

Elasticsearch | 作者 cythincx | 发布于2020年07月10日 | 阅读数:2583

【软件版本】elasticsearch 5.6.3
 【背景说明】有一个员工信息的索引,记录了员工的“基本信息”,“工作经历”,和“绩效信息”。其中“工作经历”(jobs)和“绩效信息”(performances)是nested的对象组成的数组,里面记录了员工在公司内的每一段工作经历(由于调岗等操作,有的员工会有不止一段的司内工作经历)和每一次的绩效信息。每个工作经历和绩效信息都有一个effdt表明其开始日期。

可以理解成,这样的es结构包含了所有的历史数据,理论上是可以针对任一时间点查询历史数据快照的。

【查询需求】想查出来任意时间点满足条件的员工。例如,想查出来20200101这一天,最近一段工作经历在市场部的(jobs中的effdt小于等于20200101的倒序第一条数据,它的deptId=市场部),且最近2次绩效都是S的(performances中的effdt小于等于20200101的倒序前2条数据,它们的rank=S),且员工小于26岁的(age<=26)。期望找出所有这样的员工。

【es结构参考】
{
"mappings": {
"empl": {
"properties": {
"age": {
"type": "integer"
},
"birthday": {
"type": "keyword"
},
"emplId": {
"type": "keyword"
},
"name": {
"type": "text"
},
"phonePerson": {
"type": "keyword"
},
"jobs": {
"type": "nested",
"properties": {
"deptId": {
"type": "keyword"
},
"deptName": {
"type": "text"
},
"effdt": {
"type": "long"
},
"jobDescr": {
"type": "text"
}
},

},
"performances": {
"type": "nested",
"properties": {
"rank": {
"type": "keyword"
},
"effdt": {
"type": "integer"
}
}
}
}
}
}
}
已邀请:

laoyang360 - 《一本书讲透Elasticsearch》作者,Elastic认证工程师 [死磕Elasitcsearch]知识星球地址:http://t.cn/RmwM3N9;微信公众号:铭毅天下; 博客:https://elastic.blog.csdn.net

赞同来自: cythincx

遇到复杂查询聚合,一点点切分开。
条件的走bool查询
top 的走聚合
聚合可以嵌套子聚合

cythincx

赞同来自:

有没有大佬来给点建议的呢

要回复问题请先登录注册