<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hans-CN">
	<id>http://wiki.eijux.com/index.php?action=history&amp;feed=atom&amp;title=Java_Elasticsearch%EF%BC%9A%E8%81%9A%E5%90%88%E6%9F%A5%E8%AF%A2%EF%BC%88Aggregation%EF%BC%89</id>
	<title>Java Elasticsearch：聚合查询（Aggregation） - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.eijux.com/index.php?action=history&amp;feed=atom&amp;title=Java_Elasticsearch%EF%BC%9A%E8%81%9A%E5%90%88%E6%9F%A5%E8%AF%A2%EF%BC%88Aggregation%EF%BC%89"/>
	<link rel="alternate" type="text/html" href="http://wiki.eijux.com/index.php?title=Java_Elasticsearch%EF%BC%9A%E8%81%9A%E5%90%88%E6%9F%A5%E8%AF%A2%EF%BC%88Aggregation%EF%BC%89&amp;action=history"/>
	<updated>2026-04-14T16:20:51Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.38.2</generator>
	<entry>
		<id>http://wiki.eijux.com/index.php?title=Java_Elasticsearch%EF%BC%9A%E8%81%9A%E5%90%88%E6%9F%A5%E8%AF%A2%EF%BC%88Aggregation%EF%BC%89&amp;diff=6490&amp;oldid=prev</id>
		<title>2023年3月31日 (五) 14:03 Eijux</title>
		<link rel="alternate" type="text/html" href="http://wiki.eijux.com/index.php?title=Java_Elasticsearch%EF%BC%9A%E8%81%9A%E5%90%88%E6%9F%A5%E8%AF%A2%EF%BC%88Aggregation%EF%BC%89&amp;diff=6490&amp;oldid=prev"/>
		<updated>2023-03-31T14:03:40Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;zh-Hans-CN&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;←上一版本&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;2023年3月31日 (五) 22:03的版本&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;第1行：&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第1行：&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[category:ElasticSearch&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;]]&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[category:&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Java&amp;amp;&lt;/ins&gt;ElasticSearch]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[category:Java&lt;/del&gt;]]&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== 关于 ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== 关于 ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Eijux</name></author>
	</entry>
	<entry>
		<id>http://wiki.eijux.com/index.php?title=Java_Elasticsearch%EF%BC%9A%E8%81%9A%E5%90%88%E6%9F%A5%E8%AF%A2%EF%BC%88Aggregation%EF%BC%89&amp;diff=3733&amp;oldid=prev</id>
		<title>2021年5月21日 (五) 17:27 Eijux</title>
		<link rel="alternate" type="text/html" href="http://wiki.eijux.com/index.php?title=Java_Elasticsearch%EF%BC%9A%E8%81%9A%E5%90%88%E6%9F%A5%E8%AF%A2%EF%BC%88Aggregation%EF%BC%89&amp;diff=3733&amp;oldid=prev"/>
		<updated>2021-05-21T17:27:53Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;zh-Hans-CN&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;←上一版本&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;2021年5月22日 (六) 01:27的版本&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l95&quot;&gt;第95行：&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第95行：&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# 嵌套聚合&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# 嵌套聚合&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Terms聚合（'''TermsAggregationBuilder'''） &lt;/del&gt;===&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Terms聚合 &lt;/ins&gt;===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;创建聚合条件：&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;创建聚合条件：&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&amp;quot;Java&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&amp;quot;Java&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l120&quot;&gt;第120行：&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第120行：&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Histogram聚合（'''HistogramAggregationBuilder'''） &lt;/del&gt;===&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Histogram聚合 &lt;/ins&gt;===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;创建聚合条件：&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;创建聚合条件：&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&amp;quot;Java&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&amp;quot;Java&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l145&quot;&gt;第145行：&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第145行：&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Date &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;histogram聚合（'''DateHistogramAggregationBuilder'''） &lt;/del&gt;===&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Date &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;histogram聚合 &lt;/ins&gt;===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;创建聚合条件：&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;创建聚合条件：&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&amp;quot;Java&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&amp;quot;Java&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l171&quot;&gt;第171行：&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第171行：&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Range聚合（'''RangeAggregationBuilder'''） &lt;/del&gt;===&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Range聚合 &lt;/ins&gt;===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;创建聚合条件：&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;创建聚合条件：&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&amp;quot;Java&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&amp;quot;Java&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l302&quot;&gt;第302行：&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第302行：&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# Min&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# Min&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Value &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Count（'''ValueCountAggregationBuilder'''） &lt;/del&gt;===&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Value &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Count &lt;/ins&gt;===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;'''值聚合'''，主要用于统计文档总数，类似 SQL 的 '''count''' 函数。&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;'''值聚合'''，主要用于统计文档总数，类似 SQL 的 '''count''' 函数。&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l322&quot;&gt;第322行：&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第322行：&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Cardinality（CardinalityAggregationBuilder） &lt;/del&gt;===&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Cardinality &lt;/ins&gt;===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;'''基数聚合'''，也是用于统计文档的总数，跟 Value Count 的区别是，'''基数聚合会去重'''，不会统计重复的值，类似 SQL 的 '''count(DISTINCT 字段)''' 用法。&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;'''基数聚合'''，也是用于统计文档的总数，跟 Value Count 的区别是，'''基数聚合会去重'''，不会统计重复的值，类似 SQL 的 '''count(DISTINCT 字段)''' 用法。&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* 基数聚合是一种'''近似'''算法，统计的结果会有一定误差，不过性能很好。&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* 基数聚合是一种'''近似'''算法，统计的结果会有一定误差，不过性能很好。&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l342&quot;&gt;第342行：&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第342行：&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Avg（AvgAggregationBuilder） &lt;/del&gt;===&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Avg &lt;/ins&gt;===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;创建聚合条件：&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;创建聚合条件：&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&amp;quot;Java&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&amp;quot;Java&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l357&quot;&gt;第357行：&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第357行：&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Sum（SumAggregationBuilder） &lt;/del&gt;===&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Sum &lt;/ins&gt;===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;创建聚合条件：&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;创建聚合条件：&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&amp;quot;Java&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&amp;quot;Java&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l372&quot;&gt;第372行：&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第372行：&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Max（MaxAggregationBuilder） &lt;/del&gt;===&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Max &lt;/ins&gt;===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;创建聚合条件：&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;创建聚合条件：&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&amp;quot;Java&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&amp;quot;Java&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l388&quot;&gt;第388行：&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第388行：&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Min（MinAggregationBuilder） &lt;/del&gt;===&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Min &lt;/ins&gt;===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;创建聚合条件：&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;创建聚合条件：&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&amp;quot;Java&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&amp;quot;Java&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Eijux</name></author>
	</entry>
	<entry>
		<id>http://wiki.eijux.com/index.php?title=Java_Elasticsearch%EF%BC%9A%E8%81%9A%E5%90%88%E6%9F%A5%E8%AF%A2%EF%BC%88Aggregation%EF%BC%89&amp;diff=3732&amp;oldid=prev</id>
		<title>Eijux：​建立内容为“category:ElasticSearch category:Java  == 关于 == Elasticsearch 中的聚合查询，类似 SQL 的 '''SUM'''/'''AVG'''/'''COUNT'''/'''GROUP BY''' 分组…”的新页面</title>
		<link rel="alternate" type="text/html" href="http://wiki.eijux.com/index.php?title=Java_Elasticsearch%EF%BC%9A%E8%81%9A%E5%90%88%E6%9F%A5%E8%AF%A2%EF%BC%88Aggregation%EF%BC%89&amp;diff=3732&amp;oldid=prev"/>
		<updated>2021-05-21T17:26:33Z</updated>

		<summary type="html">&lt;p&gt;建立内容为“&lt;a href=&quot;/%E5%88%86%E7%B1%BB:ElasticSearch&quot; title=&quot;分类:ElasticSearch&quot;&gt;category:ElasticSearch&lt;/a&gt; &lt;a href=&quot;/%E5%88%86%E7%B1%BB:Java&quot; title=&quot;分类:Java&quot;&gt;category:Java&lt;/a&gt;  == 关于 == Elasticsearch 中的聚合查询，类似 SQL 的 &amp;#039;&amp;#039;&amp;#039;SUM&amp;#039;&amp;#039;&amp;#039;/&amp;#039;&amp;#039;&amp;#039;AVG&amp;#039;&amp;#039;&amp;#039;/&amp;#039;&amp;#039;&amp;#039;COUNT&amp;#039;&amp;#039;&amp;#039;/&amp;#039;&amp;#039;&amp;#039;GROUP BY&amp;#039;&amp;#039;&amp;#039; 分组…”的新页面&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[category:ElasticSearch]]&lt;br /&gt;
[[category:Java]]&lt;br /&gt;
&lt;br /&gt;
== 关于 ==&lt;br /&gt;
Elasticsearch 中的聚合查询，类似 SQL 的 '''SUM'''/'''AVG'''/'''COUNT'''/'''GROUP BY''' 分组查询，主要用于统计分析场景。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
示例：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Java&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
import org.apache.http.HttpHost;&lt;br /&gt;
import org.elasticsearch.action.search.SearchRequest;&lt;br /&gt;
import org.elasticsearch.action.search.SearchResponse;&lt;br /&gt;
import org.elasticsearch.client.RequestOptions;&lt;br /&gt;
import org.elasticsearch.client.RestClient;&lt;br /&gt;
import org.elasticsearch.client.RestClientBuilder;&lt;br /&gt;
import org.elasticsearch.client.RestHighLevelClient;&lt;br /&gt;
import org.elasticsearch.index.query.*;&lt;br /&gt;
import org.elasticsearch.search.aggregations.AggregationBuilders;&lt;br /&gt;
import org.elasticsearch.search.aggregations.Aggregations;&lt;br /&gt;
import org.elasticsearch.search.aggregations.bucket.terms.Terms;&lt;br /&gt;
import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder;&lt;br /&gt;
import org.elasticsearch.search.aggregations.metrics.Avg;&lt;br /&gt;
import org.elasticsearch.search.builder.SearchSourceBuilder;&lt;br /&gt;
&lt;br /&gt;
import java.io.IOException;&lt;br /&gt;
&lt;br /&gt;
public class Main {&lt;br /&gt;
    public static void main(String[] args) throws IOException {&lt;br /&gt;
        // 首先创建RestClient，后续章节通过RestClient对象进行参数配置。&lt;br /&gt;
        RestClientBuilder restClientBuilder = RestClient.builder(&lt;br /&gt;
                new HttpHost(&amp;quot;localhost&amp;quot;, 9200, &amp;quot;http&amp;quot;), // 设置ES服务地址，支持多个&lt;br /&gt;
                new HttpHost(&amp;quot;localhost&amp;quot;, 9201, &amp;quot;http&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
        // 创建RestHighLevelClient，请求都是通过RestHighLevelClient实例发出去的。&lt;br /&gt;
        RestHighLevelClient client = new RestHighLevelClient(restClientBuilder);&lt;br /&gt;
&lt;br /&gt;
        // 创建SearchRequest对象, 设置查询索引名=order&lt;br /&gt;
        SearchRequest searchRequest = new SearchRequest(&amp;quot;order&amp;quot;);&lt;br /&gt;
        // 通过SearchSourceBuilder构建搜索参数&lt;br /&gt;
        SearchSourceBuilder builder = new SearchSourceBuilder();&lt;br /&gt;
        // 通过QueryBuilders构建ES查询条件，这里查询所有文档。&lt;br /&gt;
        builder.query(QueryBuilders.matchAllQuery());&lt;br /&gt;
&lt;br /&gt;
        // 创建terms桶聚合，聚合名字=by_shop, 字段=shop_id，根据shop_id分组&lt;br /&gt;
        TermsAggregationBuilder aggregationBuilder = AggregationBuilders.terms(&amp;quot;by_shop&amp;quot;).field(&amp;quot;shop_id&amp;quot;);&lt;br /&gt;
        // 嵌套聚合&lt;br /&gt;
        // 设置Avg指标聚合，聚合名字=avg_price, 字段=price，计算平均价格&lt;br /&gt;
        aggregationBuilder.subAggregation(AggregationBuilders.avg(&amp;quot;avg_price&amp;quot;).field(&amp;quot;price&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
        // 设置聚合查询&lt;br /&gt;
        builder.aggregation(aggregationBuilder);&lt;br /&gt;
        // 设置搜索条件&lt;br /&gt;
        searchRequest.source(builder);&lt;br /&gt;
        // 如果只想返回聚合统计结果，不想返回查询结果可以将分页大小设置为0&lt;br /&gt;
        builder.size(0);&lt;br /&gt;
&lt;br /&gt;
        // 执行ES请求&lt;br /&gt;
        SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);&lt;br /&gt;
&lt;br /&gt;
        // 处理聚合查询结果&lt;br /&gt;
        Aggregations aggregations = searchResponse.getAggregations();&lt;br /&gt;
        // 根据by_shop名字查询terms聚合结果&lt;br /&gt;
        Terms byShopAggregation = aggregations.get(&amp;quot;by_shop&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        // 遍历terms聚合结果&lt;br /&gt;
        for (Terms.Bucket bucket  : byShopAggregation.getBuckets()) {&lt;br /&gt;
            // 因为是根据shop_id分组，因此可以直接将桶的key转换成int类型&lt;br /&gt;
            int shopId = bucket.getKeyAsNumber().intValue();&lt;br /&gt;
&lt;br /&gt;
            // 根据avg_price聚合名字，获取嵌套聚合结果&lt;br /&gt;
            Avg avg = bucket.getAggregations().get(&amp;quot;avg_price&amp;quot;);&lt;br /&gt;
            // 获取平均价格&lt;br /&gt;
            double avgPrice = avg.getValue();&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // 关闭ES Client&lt;br /&gt;
        client.close();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
等效SQL：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
select shop_id, avg(price) as avg_price from order group by shop_id&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 桶聚合（bucket） ==&lt;br /&gt;
Elasticsearch桶聚合，目的就是数据分组，先将数据按指定的条件分成多个组，然后对每一个组进行统计。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
常用桶聚合：&lt;br /&gt;
# Terms聚合&lt;br /&gt;
# Histogram聚合&lt;br /&gt;
# Date histogram聚合&lt;br /&gt;
# Range聚合&lt;br /&gt;
# 嵌套聚合&lt;br /&gt;
&lt;br /&gt;
=== Terms聚合（'''TermsAggregationBuilder'''） ===&lt;br /&gt;
创建聚合条件：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Java&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
// terms聚合命名为: by_shop, 分组字段为: shop_id&lt;br /&gt;
TermsAggregationBuilder byShop = AggregationBuilders.terms(&amp;quot;by_shop&amp;quot;).field(&amp;quot;shop_id&amp;quot;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
处理聚合结果：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Java&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
Aggregations aggregations = searchResponse.getAggregations();&lt;br /&gt;
// 根据by_shop命名查询terms聚合结果&lt;br /&gt;
Terms byShopAggregation = aggregations.get(&amp;quot;by_shop&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
// 遍历terms聚合结果&lt;br /&gt;
for (Terms.Bucket bucket : byShopAggregation.getBuckets()) {&lt;br /&gt;
    // 因为是根据shop_id分组，因此可以直接将桶的key转换成int类型&lt;br /&gt;
    int shopId = bucket.getKeyAsNumber().intValue();&lt;br /&gt;
    // 如果分组的字段是字符串类型，可以直接转成String类型&lt;br /&gt;
    // String key = bucket.getKeyAsString();&lt;br /&gt;
    &lt;br /&gt;
    // 获取文档总数&lt;br /&gt;
    long count = bucket.getDocCount();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Histogram聚合（'''HistogramAggregationBuilder'''） ===&lt;br /&gt;
创建聚合条件：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Java&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
// Histogram聚合命名为: prices&lt;br /&gt;
HistogramAggregationBuilder histogramAggregationBuilder = AggregationBuilders.histogram(&amp;quot;prices&amp;quot;)&lt;br /&gt;
                                                    .field(&amp;quot;price&amp;quot;) // 根据price字段值，对数据进行分组&lt;br /&gt;
                                                    .interval(100); //  分桶的间隔为100，意思就是price字段值按100间隔分组&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
处理聚合结果：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Java&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
// 处理聚合查询结果&lt;br /&gt;
Aggregations aggregations = searchResponse.getAggregations();&lt;br /&gt;
// 根据prices命名查询Histogram聚合结果&lt;br /&gt;
Histogram histogram = aggregations.get(&amp;quot;prices&amp;quot;);&lt;br /&gt;
        &lt;br /&gt;
// 遍历聚合结果&lt;br /&gt;
for (Histogram.Bucket bucket : histogram.getBuckets()) {&lt;br /&gt;
    // 获取桶的Key值&lt;br /&gt;
    String key = bucket.getKeyAsString();&lt;br /&gt;
    // 获取文档总数&lt;br /&gt;
    long count = bucket.getDocCount();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Date histogram聚合（'''DateHistogramAggregationBuilder'''） ===&lt;br /&gt;
创建聚合条件：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Java&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
// DateHistogram聚合命名为: sales_over_time&lt;br /&gt;
DateHistogramAggregationBuilder dateHistogramAggregationBuilder = AggregationBuilders.dateHistogram(&amp;quot;sales_over_time&amp;quot;)&lt;br /&gt;
                .field(&amp;quot;date&amp;quot;) // 根据date字段值，对数据进行分组&lt;br /&gt;
                .calendarInterval(DateHistogramInterval.MONTH) // 时间分组间隔：DateHistogramInterval.* 序列常量，支持每月，每年，每天等等时间间隔&lt;br /&gt;
                .format(&amp;quot;yyyy-MM-dd&amp;quot;); // 设置返回结果中桶key的时间格式&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
处理聚合结果：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Java&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
// 处理聚合查询结果&lt;br /&gt;
Aggregations aggregations = searchResponse.getAggregations();&lt;br /&gt;
// 根据sales_over_time命名查询Histogram聚合结果&lt;br /&gt;
Histogram histogram = aggregations.get(&amp;quot;sales_over_time&amp;quot;);&lt;br /&gt;
        &lt;br /&gt;
// 遍历聚合结果&lt;br /&gt;
for (Histogram.Bucket bucket : histogram.getBuckets()) {&lt;br /&gt;
    // 获取桶的Key值&lt;br /&gt;
    String key = bucket.getKeyAsString();&lt;br /&gt;
    // 获取文档总数&lt;br /&gt;
    long count = bucket.getDocCount();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Range聚合（'''RangeAggregationBuilder'''） ===&lt;br /&gt;
创建聚合条件：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Java&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
//range聚合命名为: price_ranges&lt;br /&gt;
RangeAggregationBuilder rangeAggregationBuilder = AggregationBuilders.range(&amp;quot;price_ranges&amp;quot;)&lt;br /&gt;
                                               .field(&amp;quot;price&amp;quot;) // 根据price字段分桶&lt;br /&gt;
                                               .addUnboundedFrom(100) // 范围配置, 0 - 100&lt;br /&gt;
                                               .addRange(100.0, 200.0) // 范围配置, 100 - 200&lt;br /&gt;
                                               .addUnboundedTo(200.0); // 范围配置，&amp;gt; 200的值&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
处理聚合结果：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Java&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
// 处理聚合查询结果&lt;br /&gt;
Aggregations aggregations = searchResponse.getAggregations();&lt;br /&gt;
Range range = aggregations.get(&amp;quot;price_ranges&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
// 遍历聚合结果&lt;br /&gt;
for (Range.Bucket bucket : range.getBuckets()) {&lt;br /&gt;
    // 获取桶的Key值&lt;br /&gt;
    String key = bucket.getKeyAsString();&lt;br /&gt;
    // 获取文档总数&lt;br /&gt;
    long count = bucket.getDocCount();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 嵌套聚合 ===&lt;br /&gt;
桶聚合之间支持互相嵌套，同时桶聚合也可以嵌套多个指标聚合。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
创建嵌套聚合条件：【“桶聚合”嵌套两个“指标聚合”】&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Java&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
// 创建Terms指标聚合&lt;br /&gt;
TermsAggregationBuilder byShop = AggregationBuilders.terms(&amp;quot;by_shop&amp;quot;).field(&amp;quot;shop_id&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
// 创建avg指标聚合&lt;br /&gt;
AvgAggregationBuilder avgPriceBuilder = AggregationBuilders.avg(&amp;quot;avg_price&amp;quot;).field(&amp;quot;price&amp;quot;);&lt;br /&gt;
// 设置嵌套聚合查询条件&lt;br /&gt;
byShop.subAggregation(avgPriceBuilder);&lt;br /&gt;
&lt;br /&gt;
// 创建sum指标聚合&lt;br /&gt;
SumAggregationBuilder sumPriceBulder = AggregationBuilders.sum(&amp;quot;sum_price&amp;quot;).field(&amp;quot;price&amp;quot;);&lt;br /&gt;
// 设置嵌套聚合查询条件&lt;br /&gt;
byShop.subAggregation(sumPriceBulder);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
处理聚合结果：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Java&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
// 处理聚合查询结果&lt;br /&gt;
Aggregations aggregations = searchResponse.getAggregations();&lt;br /&gt;
Terms terms = aggregations.get(&amp;quot;by_shop&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
// 遍历聚合结果&lt;br /&gt;
for (Terms.Bucket bucket : terms.getBuckets()) {&lt;br /&gt;
      // 获取桶的Key值&lt;br /&gt;
      String key = bucket.getKeyAsString();&lt;br /&gt;
      // 获取文档总数&lt;br /&gt;
      long count = bucket.getDocCount();&lt;br /&gt;
&lt;br /&gt;
      // 处理嵌套聚合结果&lt;br /&gt;
      Aggregations subAggregations = bucket.getAggregations();&lt;br /&gt;
      // 根据 avg_price 命名，查询 avg 聚合结果&lt;br /&gt;
      Avg avgPriceResult = subAggregations.get(&amp;quot;avg_price&amp;quot;);&lt;br /&gt;
      // 获取平均价格&lt;br /&gt;
      double avgPrice = avgPriceResult.getValue();&lt;br /&gt;
&lt;br /&gt;
      // 根据 sum_price 命名，查询 sum 聚合结果&lt;br /&gt;
      Sum sumPriceResult = subAggregations.get(&amp;quot;sum_price&amp;quot;);&lt;br /&gt;
      // 获取总价格&lt;br /&gt;
      double sumPrice = sumPriceResult.getValue();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ==示例== ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Java&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
// 首先创建RestClient，后续章节通过RestClient对象进行参数配置。&lt;br /&gt;
RestClientBuilder restClientBuilder = RestClient.builder(&lt;br /&gt;
                new HttpHost(&amp;quot;localhost&amp;quot;, 9200, &amp;quot;http&amp;quot;), // 设置ES服务地址，支持多个&lt;br /&gt;
                new HttpHost(&amp;quot;localhost&amp;quot;, 9201, &amp;quot;http&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
// 创建RestHighLevelClient，请求都是通过RestHighLevelClient实例发出去的。&lt;br /&gt;
RestHighLevelClient client = new RestHighLevelClient(restClientBuilder);&lt;br /&gt;
&lt;br /&gt;
// 创建SearchRequest对象, 设置索引名=order&lt;br /&gt;
SearchRequest searchRequest = new SearchRequest(&amp;quot;order&amp;quot;);&lt;br /&gt;
// 通过SearchSourceBuilder构建搜索参数&lt;br /&gt;
SearchSourceBuilder builder = new SearchSourceBuilder();&lt;br /&gt;
// 通过QueryBuilders构建ES查询条件，这里查询所有文档，复杂的查询语句设置请参考前面的章节。&lt;br /&gt;
builder.query(QueryBuilders.matchAllQuery());&lt;br /&gt;
&lt;br /&gt;
// 创建Terms桶聚合条件&lt;br /&gt;
// terms聚合命名为: by_shop, 分组字段为: shop_id&lt;br /&gt;
TermsAggregationBuilder byShop = AggregationBuilders.terms(&amp;quot;by_shop&amp;quot;).field(&amp;quot;shop_id&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
// 设置聚合条件&lt;br /&gt;
builder.aggregation(byShop);&lt;br /&gt;
&lt;br /&gt;
// 设置搜索条件&lt;br /&gt;
searchRequest.source(builder);&lt;br /&gt;
&lt;br /&gt;
// 执行ES请求&lt;br /&gt;
SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);&lt;br /&gt;
&lt;br /&gt;
// 处理聚合查询结果&lt;br /&gt;
Aggregations aggregations = searchResponse.getAggregations();&lt;br /&gt;
// 根据by_shop名字查询terms聚合结果&lt;br /&gt;
Terms byShopAggregation = aggregations.get(&amp;quot;by_shop&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
// 遍历terms聚合结果&lt;br /&gt;
for (Terms.Bucket bucket  : byShopAggregation.getBuckets()) {&lt;br /&gt;
    // 因为是根据shop_id分组，因此可以直接将桶的key转换成int类型&lt;br /&gt;
    int shopId = bucket.getKeyAsNumber().intValue();&lt;br /&gt;
    // 如果分组的字段是字符串类型，可以直接转成String类型&lt;br /&gt;
    // String key = bucket.getKeyAsString();&lt;br /&gt;
    // 获取文档总数&lt;br /&gt;
    long count = bucket.getDocCount();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 指标聚合（metrics） ==&lt;br /&gt;
Elasticsearch 指标聚合，就是类似 SQL 的统计函数，指标聚合可以单独使用，也可以跟桶聚合一起使用。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
常用指标聚合：&lt;br /&gt;
# Value Count&lt;br /&gt;
# Cardinality&lt;br /&gt;
# Avg&lt;br /&gt;
# Sum&lt;br /&gt;
# Max&lt;br /&gt;
# Min&lt;br /&gt;
&lt;br /&gt;
=== Value Count（'''ValueCountAggregationBuilder'''） ===&lt;br /&gt;
'''值聚合'''，主要用于统计文档总数，类似 SQL 的 '''count''' 函数。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
创建聚合条件：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Java&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
// 创建Value Count指标聚合&lt;br /&gt;
// 聚合统计命名为：orders， 统计order_id字段值的数量&lt;br /&gt;
ValueCountAggregationBuilder valueCountAggregationBuilder = AggregationBuilders.count(&amp;quot;orders&amp;quot;).field(&amp;quot;order_id&amp;quot;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
处理聚合结果：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Java&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
Aggregations aggregations = searchResponse.getAggregations();&lt;br /&gt;
// 根据orders命名查询，ValueCount统计结果&lt;br /&gt;
ValueCount valueCount = aggregations.get(&amp;quot;orders&amp;quot;);&lt;br /&gt;
// 打印结果&lt;br /&gt;
System.out.println(valueCount.getValue());&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Cardinality（CardinalityAggregationBuilder） ===&lt;br /&gt;
'''基数聚合'''，也是用于统计文档的总数，跟 Value Count 的区别是，'''基数聚合会去重'''，不会统计重复的值，类似 SQL 的 '''count(DISTINCT 字段)''' 用法。&lt;br /&gt;
* 基数聚合是一种'''近似'''算法，统计的结果会有一定误差，不过性能很好。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
创建聚合条件：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Java&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
// 聚合统计命名为：total， 近似统计id字段值的数量&lt;br /&gt;
CardinalityAggregationBuilder cardinalityAggregationBuilder = AggregationBuilders.cardinality(&amp;quot;total&amp;quot;).field(&amp;quot;id&amp;quot;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
处理聚合结果：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Java&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
Aggregations aggregations = searchResponse.getAggregations();&lt;br /&gt;
// 根据total命名查询，Cardinality统计结果&lt;br /&gt;
Cardinality cardinality = aggregations.get(&amp;quot;total&amp;quot;);&lt;br /&gt;
// 打印结果&lt;br /&gt;
System.out.println(cardinality.getValue());&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Avg（AvgAggregationBuilder） ===&lt;br /&gt;
创建聚合条件：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Java&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
AvgAggregationBuilder avgAggregationBuilder = AggregationBuilders.avg(&amp;quot;avg_price&amp;quot;).field(&amp;quot;price&amp;quot;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
处理聚合结果：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Java&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
Aggregations aggregations = searchResponse.getAggregations();&lt;br /&gt;
// 根据total命名查询，Avg统计结果&lt;br /&gt;
Avg avgPrice = aggregations.get(&amp;quot;avg_price&amp;quot;);&lt;br /&gt;
// 打印结果&lt;br /&gt;
System.out.println(avgPrice.getValue());&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Sum（SumAggregationBuilder） ===&lt;br /&gt;
创建聚合条件：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Java&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
SumAggregationBuilder sumAggregationBuilder = AggregationBuilders.sum(&amp;quot;total_sale&amp;quot;).field(&amp;quot;price&amp;quot;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
处理聚合结果：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Java&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
Aggregations aggregations = searchResponse.getAggregations();&lt;br /&gt;
// 根据total命名查询，Sum统计结果&lt;br /&gt;
Sum totalPrice = aggregations.get(&amp;quot;total_sale&amp;quot;);&lt;br /&gt;
// 打印结果&lt;br /&gt;
System.out.println(totalPrice.getValue());&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Max（MaxAggregationBuilder） ===&lt;br /&gt;
创建聚合条件：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Java&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
MaxAggregationBuilder maxAggregationBuilder = AggregationBuilders.max(&amp;quot;max_price&amp;quot;).field(&amp;quot;price&amp;quot;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
处理聚合结果：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Java&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
// 处理聚合查询结果&lt;br /&gt;
Aggregations aggregations = searchResponse.getAggregations();&lt;br /&gt;
// 根据max_price命名查询，Max统计结果&lt;br /&gt;
Max maxPrice = aggregations.get(&amp;quot;max_price&amp;quot;);&lt;br /&gt;
// 打印结果&lt;br /&gt;
System.out.println(maxPrice.getValue());&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Min（MinAggregationBuilder） ===&lt;br /&gt;
创建聚合条件：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Java&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
MinAggregationBuilder minAggregationBuilder = AggregationBuilders.min(&amp;quot;min_price&amp;quot;).field(&amp;quot;price&amp;quot;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
处理聚合结果：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Java&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
Aggregations aggregations = searchResponse.getAggregations();&lt;br /&gt;
// 根据min_price命名查询，Min统计结果&lt;br /&gt;
Min minPrice = aggregations.get(&amp;quot;min_price&amp;quot;);&lt;br /&gt;
// 打印结果&lt;br /&gt;
System.out.println(minPrice.getValue());&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ==示例== ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Java&amp;quot; highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
// 首先创建RestClient，后续章节通过RestClient对象进行参数配置。&lt;br /&gt;
RestClientBuilder restClientBuilder = RestClient.builder(&lt;br /&gt;
                new HttpHost(&amp;quot;localhost&amp;quot;, 9200, &amp;quot;http&amp;quot;), // 设置ES服务地址，支持多个&lt;br /&gt;
                new HttpHost(&amp;quot;localhost&amp;quot;, 9201, &amp;quot;http&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
// 创建RestHighLevelClient，�请求都是通过RestHighLevelClient实例发出去的。&lt;br /&gt;
        RestHighLevelClient client = new RestHighLevelClient(restClientBuilder);&lt;br /&gt;
&lt;br /&gt;
// 创建SearchRequest对象, 索引名=order&lt;br /&gt;
SearchRequest searchRequest = new SearchRequest(&amp;quot;order&amp;quot;);&lt;br /&gt;
// 通过SearchSourceBuilder构建搜索参数&lt;br /&gt;
SearchSourceBuilder builder = new SearchSourceBuilder();&lt;br /&gt;
// 通过QueryBuilders构建ES查询条件，这里查询所有文档，复杂的查询语句设置请参考前面的章节。&lt;br /&gt;
builder.query(QueryBuilders.matchAllQuery());&lt;br /&gt;
&lt;br /&gt;
// 创建Value Count指标聚合&lt;br /&gt;
// 聚合统计命名为：orders， 统计order_id字段值的数量&lt;br /&gt;
ValueCountAggregationBuilder valueCountAggregationBuilder = AggregationBuilders.count(&amp;quot;orders&amp;quot;)&lt;br /&gt;
                .field(&amp;quot;order_id&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
// 创建Sum指标聚合&lt;br /&gt;
// 聚合统计命名为：total_sale， 统计price字段值的总和&lt;br /&gt;
SumAggregationBuilder sumAggregationBuilder = AggregationBuilders.sum(&amp;quot;total_sale&amp;quot;)&lt;br /&gt;
                .field(&amp;quot;price&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
// 设置聚合查询,可以设置多个聚合查询条件，只要聚合查询命名不同就行&lt;br /&gt;
builder.aggregation(valueCountAggregationBuilder);&lt;br /&gt;
builder.aggregation(sumAggregationBuilder);&lt;br /&gt;
&lt;br /&gt;
// 设置搜索条件&lt;br /&gt;
searchRequest.source(builder);&lt;br /&gt;
&lt;br /&gt;
// 执行ES请求&lt;br /&gt;
SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// 处理聚合查询结果&lt;br /&gt;
Aggregations aggregations = searchResponse.getAggregations();&lt;br /&gt;
// 根据orders命名查询，ValueCount统计结果&lt;br /&gt;
ValueCount valueCount = aggregations.get(&amp;quot;orders&amp;quot;);&lt;br /&gt;
System.out.println(valueCount.getValue());&lt;br /&gt;
&lt;br /&gt;
// 根据total_sale命名查询，Sum统计结果&lt;br /&gt;
Sum sum = aggregations.get(&amp;quot;total_sale&amp;quot;);&lt;br /&gt;
System.out.println(sum.getValue());&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Eijux</name></author>
	</entry>
</feed>