elasticsearch-dsl聚合仅返回10个结果。如何改变这个

har*_*der 5 python elasticsearch elasticsearch-dsl

我正在使用elasticsearch-dsl python库连接到elasticsearch并进行聚合。

我正在关注代码

search.aggs.bucket('per_date', 'terms', field='date')\
        .bucket('response_time_percentile', 'percentiles', field='total_time',
                percents=percentiles, hdr={"number_of_significant_value_digits": 1})
response = search.execute()
Run Code Online (Sandbox Code Playgroud)

这工作正常,但仅返回10个结果 response.aggregations.per_ts.buckets

我想要所有结果

我试图用一种溶液size=0中提到了这个问题

search.aggs.bucket('per_ts', 'terms', field='ts', size=0)\
        .bucket('response_time_percentile', 'percentiles', field='total_time',
                percents=percentiles, hdr={"number_of_significant_value_digits": 1})

response = search.execute()
Run Code Online (Sandbox Code Playgroud)

但这会导致错误

TransportError(400, u'parsing_exception', u'[terms] failed to parse field [size]')
Run Code Online (Sandbox Code Playgroud)

Soo*_*ony 8

我遇到过同样的问题。我终于找到了这个解决方案:

s = Search(using=client, index="jokes").query("match", jks_content=keywords).extra(size=0)
a = A('terms', field='jks_title.keyword', size=999999)
s.aggs.bucket('by_title', a)
response = s.execute()
Run Code Online (Sandbox Code Playgroud)

之后2.x,size=0对于所有存储桶结果将不再有效,请参阅此线程。在我的示例中,我只是将大小设置为 999999。您可以根据自己的情况选择一个较大的数字。

建议为大小在 1 到 2147483647 之间的数字明确设置合理的值。

希望这可以帮助。


fmd*_*lle -2

您应该阅读文档。

所以在你的情况下,应该是这样的:

search.aggs.bucket('per_date', 'terms', field='date')\
            .bucket('response_time_percentile', 'percentiles', field='total_time',
                    percents=percentiles, hdr={"number_of_significant_value_digits": 1})[0:50]
response = search.execute()
Run Code Online (Sandbox Code Playgroud)