假设我有一个带有大量用户评论的 Elasticsearch 索引:
{ "name": "chris", "date": "2016-01-01", "msg": "hi, foo"}
{ "name": "chris", "date": "2016-01-05", "msg": "bye, bar"}
{ "name": "aaron", "date": "2016-01-10", "msg": "who's bar"}
{ "name": "aaron", "date": "2016-01-15", "msg": "not foo"}
Run Code Online (Sandbox Code Playgroud)
首先,我想找到每个用户的最新评论。我可以通过top_hits聚合来做到这一点:
"aggs": {
"name": {
"terms": { "field": "name" },
"aggs": {
"latest_comment": {
"top_hits": {
"sort": [ {"date": { "order": "desc" } } ],
"size": 1
}
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
这有效地给了我以下内容:
{ "name": "chris", "date": "2016-01-05", "msg": "bye, bar"}
{ "name": "aaron", "date": "2016-01-15", "msg": "not foo"}
Run Code Online (Sandbox Code Playgroud)
但是我现在如何过滤这些结果?并且要非常清楚,我想在聚合选择最新的点击后进行过滤top_hits,而不是之前。
谢谢你。
我有确切的问题。经过大量搜索后的结果是这样的:
如果您想根据数字指标过滤热门结果,您可以使用管道聚合,例如存储桶选择器。这种方式以某种方式在elasticsearch中实现SQL HAVING。对于这种情况,可以找到 在elasticsearch中实现HAVING的一个非常有用的答案
但是,如果您要过滤的指标不是数字,则无法(至少在 v 6.2.4 之前)在 elasticsearch 端执行此操作。
在这种情况下,正如 @ismail 所说,您需要通过软件在客户端执行此操作。
| 归档时间: |
|
| 查看次数: |
3067 次 |
| 最近记录: |