我们希望汇总一些价值。例如,我们假设我们正在为在组织中注册的用户编制索引。
我们希望让注册用户的数量分为:
预计我们需要使用0到1000个用户(gmail,fb,yahoo - 3个应用程序)。和1001到2000(自己的应用程序,其他应用程序 - 2个应用程序)。需要像上面那样的方案。
我们如何在弹性搜索中实现这一目标?有什么建议吗?
由于
答案 0 :(得分:0)
假设您正在索引用户对象,如下所示:
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
}
]
}
}
}
您可以看到与每个组织值对应的存储桶。
请注意:
size
聚合的terms
参数)not_analyzed
,以便汇总原始值(而不是通过分析获得的术语) 我强烈邀请您详细了解分析以及terms
汇总documentation。