【问题标题】:Elastic search aggregation and range弹性搜索聚合和范围
【发布时间】:2015-03-13 09:05:18
【问题描述】:

我们想要聚合一些价值。例如,假设我们正在为在组织中注册的用户编制索引。

我们希望将注册用户数拆分为:

  • 从 gmail 注册:900
  • 通过 fb 注册:800
  • 通过雅虎注册:700
  • 通过自己的应用程序注册:1500
  • 他人注册:1600

预计我们需要存储 0 到 1000 个用户(gmail、fb、yahoo - 3 个应用程序)。以及 1001 到 2000(自己的应用程序,其他应用程序 - 2 个应用程序)。需要像上述场景一样存储。

我们如何在弹性搜索中实现这一点?有什么建议吗?

谢谢

【问题讨论】:

    标签: elasticsearch elasticsearch-plugin spring-data-elasticsearch


    【解决方案1】:

    假设您正在索引用户对象,如下所示:

    POST users/user
    {
      "login":"user1",
      "organization":"fb"
    }
    

    您正在尝试按organization 值聚合您的用户。为此,您必须使用 terms 聚合。

    您的查询将如下所示:

    POST users/_search?search_type=count
    {
      "aggs": {
        "by_organization": {
          "terms": {
            "field": "organization"
          }
        }
      }
    }
    

    注意:此处的 search_type=count 只是为了获得较短的响应,因为不会返回结果命中(请参阅here)。

    您的搜索响应将类似于:

    {
       (...)
       "aggregations": {
          "by_organization": {
             "doc_count_error_upper_bound": 0,
             "sum_other_doc_count": 0,
             "buckets": [
                {
                   "key": "app",
                   "doc_count": 4
                },
                {
                   "key": "fb",
                   "doc_count": 3
                },
                {
                   "key": "gmail",
                   "doc_count": 2
                }
             ]
          }
       }
    }
    

    您可以看到每个组织值对应的存储桶。

    请注意:

    • 默认只返回前10个桶(见terms聚合的size参数)
    • 这个简单示例的工作原理是组织值很简单,但在现实生活中,您必须将组织字段设置为 not_analyzed 才能聚合原始值(而不是通过分析获得的术语)李>

    我强烈邀请您阅读有关分析的更多信息,以及 terms 聚合 documentation

    【讨论】:

    • 实际上我们得到的值是聚合值,例如 (app - 51,fb - 100,gmail - 30,other - 15)。现在我们需要将值拆分为 0 到 50 个用户(gmail 和其他)。51 到 100 个用户(app 和 fb)。我们需要存储这些值。这可能吗?
    • 目前,我认为这是不可能的:您必须在应用程序端进行。但是,它计划成为 v2.0 的一部分(请参阅related issue)。
    • 感谢您提供信息 Thomas Cucchietti。
    猜你喜欢
    • 2014-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-19
    • 2014-11-10
    • 2017-01-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多