我们想要聚合一些值。例如,假设我们正在索引在组织中注册的用户。
我们希望将注册用户数拆分为:
- 从 gmail 注册:900
- 通过 fb 注册:800
- 通过雅虎注册:700
- 通过自己的应用程序注册:1500
- 通过他人注册:1600
预计我们需要存储 0 到 1000 个用户(gmail、fb、yahoo - 3 个应用程序)。以及 1001 到 2000(自己的应用程序,其他应用程序 - 2 个应用程序)。需要像上面的场景一样存储。
我们如何在弹性搜索中实现这一点?有什么建议么 ?
谢谢
我们想要聚合一些值。例如,假设我们正在索引在组织中注册的用户。
我们希望将注册用户数拆分为:
预计我们需要存储 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
}
]
}
}
}
您可以看到与每个组织值对应的存储桶。
意识到:
size
参数)terms
not_analyzed
才能聚合原始值(而不是通过分析获得的术语)我强烈邀请您阅读有关分析和terms
聚合文档的更多信息。