elasticsearchdsl聚合只返回10个结果。如何改变这一点

2024-05-14 02:33:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用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()

这很好,但在response.aggregations.per_ts.buckets中只返回10个结果

我要所有的结果

我用size=0尝试过一种解决方案,如this question中所述

^{pr2}$

但这会导致错误

TransportError(400, u'parsing_exception', u'[terms] failed to parse field [size]')

Tags: fieldsearchsizedatebuckettimeresponseelasticsearch
2条回答

我也有同样的问题。我终于找到了解决办法:

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()

2.x之后,size=0对于所有的bucket结果将不再有效,请参考此thread。在我的示例中,我将大小设置为999999。你可以根据你的情况选择一个大的数字。在

It is recommended to explicitly set reasonable value for size a number between 1 to 2147483647.

希望这有帮助。在

你应该读一下documentation。在

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

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()

相关问题 更多 >