在 Elasticsearch 的 Go 客户端中,searchService.Size(0)
中的 0
表示不返回任何匹配文档的详细数据(即不返回 hits
数组中的文档内容),只返回聚合结果(aggregations)和元数据(如匹配总数)。
作用详解:
-
不返回文档详情
正常情况下,Size(n)
会返回前n
条文档的完整数据(_source
)。设为0
后,响应中的hits.hits
数组为空,节省网络传输和反序列化开销。 -
保留聚合结果
如果查询包含聚合(如terms
、avg
),结果中的aggregations
部分仍会完整返回。 -
保留匹配总数
响应中的hits.total
字段仍会显示匹配文档的总数量(即使文档详情不返回)。
适用场景:
-
仅需获取聚合统计结果(如分组计数、平均值等)。
-
只需知道匹配文档总数,无需具体文档内容。
-
优化性能,减少不必要的数据传输。
示例:
go
复制
下载
searchService := esClient.Search(). Index("my_index"). Query(elastic.NewMatchQuery("message", "error")). Size(0). // 关键设置:不返回文档详情 Aggregation("hourly", elastic.NewDateHistogramAggregation().Field("@timestamp").CalendarInterval("hour")) result, _ := searchService.Do(ctx) // 此时 result.Hits.Hits 为空列表 [] fmt.Println("Total hits:", result.Hits.TotalHits) // 输出总数 // 但聚合数据正常返回 agg, _ := result.Aggregations.DateHistogram("hourly") for _, bucket := range agg.Buckets { fmt.Printf("Hour %s: %d logs\n", bucket.KeyAsString, bucket.DocCount) }
对比:
-
Size(0)
:返回总匹配数 + 聚合结果,无文档详情。 -
Size(10)
:返回前 10 条文档详情 + 总匹配数 + 聚合结果。
提示:在仅需聚合/总数场景下,使用
Size(0)
可显著提升性能,尤其是匹配文档量大的情况。