【问题标题】:Applying filters on results of aggregation in elastic search在弹性搜索中对聚合结果应用过滤器
【发布时间】:2016-01-05 14:55:40
【问题描述】:

我遇到了一个问题,我需要对弹性搜索中的聚合结果应用一些过滤器。

例如,假设以下是字段 event_name、位置、时间、user_id

现在我的要求是获取在过去一个月内执行特定操作(比如说“logged_in”)至少 5 次的用户 ID。我能够获得在过去一个月内登录的用户。但是如何进一步过滤结果呢?

我写的查询是:

{
   "query": {
      "filtered": {
         "filter": {
            "bool": {
                "must": [
                  {
                    "range":{
                       "time":{
                          "from": 1412312824,
                          "to": 1422142824
                        }
                     }
                  },
                  {
                     "term": {
                        "action": "logged_in"
                      }          
                  }
               ]
            }
         }
      }
   },
   "aggs": {
      "result": {
         "terms": {
            "field": "user_id"
         }
      }
   }
}

样本输出:

user_id, doc_count
1          10
2          25
3           1
4           2

我需要对上述结果应用过滤器。我该怎么做?

【问题讨论】:

  • 您只想要 doc_count >= 到 5 的 user_id 吗?
  • doc_count >= 5 只是一个例子。理想情况下,我想应用任何过滤器。就像范围过滤器一样,我希望用户执行了 2 到 5 次特定操作。

标签: elasticsearch


【解决方案1】:

我相信您可以将 min_doc_count 键添加到您的术语聚合中,如下所示:

...
"aggs": {
    "result": {
        "terms": {
            "field": "user_id",
            "min_doc_count": 5
        } 
    }
}
...

来源:https://www.elastic.co/guide/en/elasticsearch/reference/1.6/search-aggregations-bucket-terms-aggregation.html#_minimum_document_count

【讨论】:

  • 我看到了这个。但条件一般。有时查询也可以像用户最多执行了 n 次特定操作。像范围过滤器一样,我希望用户执行了 2 到 5 次特定操作
  • 我明白了。听起来您的问题类似于 github.com/elastic/elasticsearch/issues/4404,如果您向下滚动,建议使用 bucket_selector 聚合 (elastic.co/guide/en/elasticsearch/reference/master/…)。
  • 对于我的用例来说似乎太复杂了。也无法在官方指南中找到有关减速器的信息。无论如何,谢谢你的回答。想知道是否有其他方法可以实现这一点。
猜你喜欢
  • 1970-01-01
  • 2019-09-10
  • 1970-01-01
  • 2020-06-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-06
  • 2014-07-11
相关资源
最近更新 更多