我有一个包含以下列的文档:
我做了这个查询“Michael Seam 度假”,因此elasticsearch返回了数千个结果。
查询结果没问题。首先,我收到了Michael Seam的假期,然后是其他员工的假期结果
在结果中,有数十名员工使用“休假”一词的内容,如:
当我为员工专栏添加聚合时,我在Michael Seam Porter和Michael Seam Carl之前收到了Lucas,Maria和其他人,有时他们甚至因聚合大小而出现。
如何(仅在聚合中)显示查询中包含的员工?有可能吗?
P.S。:我正在使用ES 1.7.5
答案 0 :(得分:0)
我找到了一种方法。
"aggregatePerEmployee" : {
"terms" : {
"field" : "employee.raw",
"order": {
"top_hit": "desc"
},
"size" : 4
},
"aggs": {
"top_hit" : {
"max": {
"script": "_score"
}
}
}
}
有了这个,汇总顺序就会考虑每个员工的最高分。
查看结果
"aggregatePerEmployee": {
"doc_count_error_upper_bound": -1,
"sum_other_doc_count": 1145,
"buckets": [
{
"key": "Michael Seam Carl",
"doc_count": 3,
"top_hit": {
"value": 2.097010612487793
}
},
{
"key": "Michael Seam Porter ",
"doc_count": 1,
"top_hit": {
"value": 2.0433993339538574
}
},
{
"key": "Lucas",
"doc_count": 30,
"top_hit": {
"value": 2.0033993339538574
}
},
{
"key": "Jose White ",
"doc_count": 15,
"top_hit": {
"value": 1.5995635986328125
}
}
]
}
P.S。:要启用这个groovy脚本,需要编辑elasticsearch.yml并在其上加上这一行:
script.engine.groovy.inline.aggs: on
之后,重新启动elasticsearch节点