POST /_search
{
"size": 0,
"aggs": {
"by_grp" : {
"terms": {
"field": "grpId",
"size": 0
},
"aggs": {
"twitter_count": {
"range": {
"field": "twitter.followers",
"ranges": [
{ "to" : 501},
{ "from" : 501, "to" : 1001},
{ "from" : 1001, "to" : 5001},
{ "from" : 5001}
]
},
"aggs" : {
"email_addy": {
"terms" : {
"field": "email.value",
"size": 0
}
}
}
}
}
}
}
}使用elastic-search-dsl,我的python代码是
from datetime import datetime
from elasticsearch_dsl import DocType, String, Date, Integer, Search, Q
from elasticsearch_dsl.connections import connections
from elasticsearch import Elasticsearch
client = connections.create_connection(hosts=['http://somehost:9200'])
s = Search(using=client, index="dexy", doc_type="grp")
s.aggs.bucket('by_grp', 'terms', field='grpId', size=0) \
.bucket('twitter_count', 'range', field='twitter.followers')我应该从哪里开始定义范围,就像在CURL代码中一样?关于这个主题的GIT和docs目前还很少。找不到任何示例。
发布于 2015-04-29 00:55:13
这看起来很奇怪,因为它似乎没有完全遵循缩进/行连续规则,但这是有效的。
s.aggs.bucket('by_grp', 'terms', field='grpId', size=0) \
.bucket('twitter_count', 'range', field='twitter.followers',
ranges=[
{'to': 5001},
{'from': 5001, 'to': 10001},
{'from': 10001, 'to': 50001},
{'from': 50001}
]
) \
.bucket('email_addy', 'terms', field='email.value', size=0)注意,大小=0意味着查询应该返回该项目的所有结果,而不是默认的10。因此,它将返回所有grpId的结果,而不只是10,并包括落入范围存储桶中的所有电子邮件。
https://stackoverflow.com/questions/29904261
复制相似问题