我们想要聚合一些价值。例如,假设我们是在组织中注册的索引用户。
我们想让注册用户数分裂如下:
预期我们需要0到1000个用户(gmail,fb,Yahoo-3应用程序).And 1001到2000(自己的应用程序,其他应用程序).Need来像上面的场景那样抓取。
我们如何在弹性搜索中实现这一点?有什么建议吗?
谢谢
发布于 2015-03-13 10:59:29
假设您正在为用户对象建立索引,如下所示:
POST users/user
{
"login":"user1",
"organization":"fb"
}您正在尝试根据用户的organization值聚合用户。为此,您必须使用terms聚合。
您的查询如下:
POST users/_search?search_type=count
{
"aggs": {
"by_organization": {
"terms": {
"field": "organization"
}
}
}
}注意: search_type=count在这里只是为了得到更短的响应,因为结果点击不会被返回(参见http://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-search-type.html#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聚合文档的内容。
https://stackoverflow.com/questions/29028361
复制相似问题