繁体   English   中英

弹性搜索聚合和范围

[英]Elastic search aggregation and range

我们希望聚集一些价值。 例如,假设我们正在索引在组织中注册的用户。

我们想让注册用户数像这样分裂:

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

预期我们需要存储0到1000个用户(gmail,fb,yahoo-3个应用程序)。以及1001到2000个用户(自己的应用程序,其他应用程序-2个应用程序)。

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

谢谢

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

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

您正在尝试通过用户organization价值来汇总他们。 为此,您必须使用terms汇总。

您的查询将如下所示:

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

注意:此处的search_type = count响应时间较短,因为不会返回结果匹配(请参阅此处 )。

您的搜索响应将类似于:

{
   (...)
   "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汇总文档

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM