Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
檀越@新空间
elasticsearch-demo
提交
c5c6ec5a
E
elasticsearch-demo
项目概览
檀越@新空间
/
elasticsearch-demo
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
E
elasticsearch-demo
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
c5c6ec5a
编写于
5月 13, 2023
作者:
檀越@新空间
🐭
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix:聚合搜索api
上级
df491981
变更
5
显示空白变更内容
内联
并排
Showing
5 changed file
with
506 addition
and
0 deletion
+506
-0
src/test/java/es_04_agg/TestAggs_01.java
src/test/java/es_04_agg/TestAggs_01.java
+93
-0
src/test/java/es_04_agg/TestAggs_02.java
src/test/java/es_04_agg/TestAggs_02.java
+97
-0
src/test/java/es_04_agg/TestAggs_03.java
src/test/java/es_04_agg/TestAggs_03.java
+118
-0
src/test/java/es_04_agg/TestAggs_04.java
src/test/java/es_04_agg/TestAggs_04.java
+95
-0
src/test/java/es_04_agg/TestAggs_05.java
src/test/java/es_04_agg/TestAggs_05.java
+103
-0
未找到文件。
src/test/java/es_04_agg/TestAggs_01.java
0 → 100644
浏览文件 @
c5c6ec5a
package
es_04_agg
;
import
org.elasticsearch.action.search.SearchRequest
;
import
org.elasticsearch.action.search.SearchResponse
;
import
org.elasticsearch.client.RequestOptions
;
import
org.elasticsearch.client.RestHighLevelClient
;
import
org.elasticsearch.index.query.QueryBuilders
;
import
org.elasticsearch.search.aggregations.AggregationBuilders
;
import
org.elasticsearch.search.aggregations.Aggregations
;
import
org.elasticsearch.search.aggregations.bucket.terms.Terms
;
import
org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder
;
import
org.elasticsearch.search.builder.SearchSourceBuilder
;
import
org.junit.Test
;
import
org.junit.runner.RunWith
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.boot.test.context.SpringBootTest
;
import
org.springframework.test.context.junit4.SpringRunner
;
import
java.io.IOException
;
import
java.util.List
;
/**
* 按照颜色分组,计算每个颜色卖出的个数
*
* @author : qinyingjie
* @version : 2.2.0
* @date : 2023/5/13 20:54
*/
@SpringBootTest
@RunWith
(
SpringRunner
.
class
)
public
class
TestAggs_01
{
@Autowired
RestHighLevelClient
client
;
@Test
public
void
testAggs
()
throws
IOException
{
// GET /tvs/_search
// {
// "size": 0,
// "query": {"match_all": {}},
// "aggs": {
// "group_by_color": {
// "terms": {
// "field": "color"
// }
// }
// }
// }
//1 构建请求
SearchRequest
searchRequest
=
new
SearchRequest
(
"tvs"
);
//请求体
SearchSourceBuilder
searchSourceBuilder
=
new
SearchSourceBuilder
();
searchSourceBuilder
.
size
(
0
);
searchSourceBuilder
.
query
(
QueryBuilders
.
matchAllQuery
());
TermsAggregationBuilder
termsAggregationBuilder
=
AggregationBuilders
.
terms
(
"group_by_color"
).
field
(
"color"
);
searchSourceBuilder
.
aggregation
(
termsAggregationBuilder
);
//请求体放入请求头
searchRequest
.
source
(
searchSourceBuilder
);
//2 执行
SearchResponse
searchResponse
=
client
.
search
(
searchRequest
,
RequestOptions
.
DEFAULT
);
//3 获取结果
// "aggregations" : {
// "group_by_color" : {
// "doc_count_error_upper_bound" : 0,
// "sum_other_doc_count" : 0,
// "buckets" : [
// {
// "key" : "红色",
// "doc_count" : 4
// },
// {
// "key" : "绿色",
// "doc_count" : 2
// },
// {
// "key" : "蓝色",
// "doc_count" : 2
// }
// ]
// }
Aggregations
aggregations
=
searchResponse
.
getAggregations
();
Terms
group_by_color
=
aggregations
.
get
(
"group_by_color"
);
List
<?
extends
Terms
.
Bucket
>
buckets
=
group_by_color
.
getBuckets
();
for
(
Terms
.
Bucket
bucket
:
buckets
)
{
String
key
=
bucket
.
getKeyAsString
();
System
.
out
.
println
(
"key:"
+
key
);
long
docCount
=
bucket
.
getDocCount
();
System
.
out
.
println
(
"docCount:"
+
docCount
);
System
.
out
.
println
(
"================================="
);
}
}
}
\ No newline at end of file
src/test/java/es_04_agg/TestAggs_02.java
0 → 100644
浏览文件 @
c5c6ec5a
package
es_04_agg
;
import
org.elasticsearch.action.search.SearchRequest
;
import
org.elasticsearch.action.search.SearchResponse
;
import
org.elasticsearch.client.RequestOptions
;
import
org.elasticsearch.client.RestHighLevelClient
;
import
org.elasticsearch.index.query.QueryBuilders
;
import
org.elasticsearch.search.aggregations.AggregationBuilders
;
import
org.elasticsearch.search.aggregations.Aggregations
;
import
org.elasticsearch.search.aggregations.bucket.terms.Terms
;
import
org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder
;
import
org.elasticsearch.search.aggregations.metrics.Avg
;
import
org.elasticsearch.search.aggregations.metrics.AvgAggregationBuilder
;
import
org.elasticsearch.search.builder.SearchSourceBuilder
;
import
org.junit.Test
;
import
org.junit.runner.RunWith
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.boot.test.context.SpringBootTest
;
import
org.springframework.test.context.junit4.SpringRunner
;
import
java.io.IOException
;
import
java.util.List
;
/**
* 按照颜色分组,计算每个颜色卖出的个数,每个颜色卖出的平均价格
*
* @author : qinyingjie
* @version : 2.2.0
* @date : 2023/5/13 20:54
*/
@SpringBootTest
@RunWith
(
SpringRunner
.
class
)
public
class
TestAggs_02
{
@Autowired
RestHighLevelClient
client
;
@Test
public
void
testAggsAndAvg
()
throws
IOException
{
// GET /tvs/_search
// {
// "size": 0,
// "query": {"match_all": {}},
// "aggs": {
// "group_by_color": {
// "terms": {
// "field": "color"
// },
// "aggs": {
// "avg_price": {
// "avg": {
// "field": "price"
// }
// }
// }
// }
// }
// }
//1 构建请求
SearchRequest
searchRequest
=
new
SearchRequest
(
"tvs"
);
//请求体
SearchSourceBuilder
searchSourceBuilder
=
new
SearchSourceBuilder
();
searchSourceBuilder
.
size
(
0
);
searchSourceBuilder
.
query
(
QueryBuilders
.
matchAllQuery
());
TermsAggregationBuilder
termsAggregationBuilder
=
AggregationBuilders
.
terms
(
"group_by_color"
).
field
(
"color"
);
//terms聚合下填充一个子聚合
AvgAggregationBuilder
avgAggregationBuilder
=
AggregationBuilders
.
avg
(
"avg_price"
).
field
(
"price"
);
termsAggregationBuilder
.
subAggregation
(
avgAggregationBuilder
);
searchSourceBuilder
.
aggregation
(
termsAggregationBuilder
);
//请求体放入请求头
searchRequest
.
source
(
searchSourceBuilder
);
//2 执行
SearchResponse
searchResponse
=
client
.
search
(
searchRequest
,
RequestOptions
.
DEFAULT
);
//3 获取结果
// {
// "key" : "红色",
// "doc_count" : 4,
// "avg_price" : {
// "value" : 3250.0
// }
// }
Aggregations
aggregations
=
searchResponse
.
getAggregations
();
Terms
group_by_color
=
aggregations
.
get
(
"group_by_color"
);
List
<?
extends
Terms
.
Bucket
>
buckets
=
group_by_color
.
getBuckets
();
for
(
Terms
.
Bucket
bucket
:
buckets
)
{
String
key
=
bucket
.
getKeyAsString
();
System
.
out
.
println
(
"key:"
+
key
);
long
docCount
=
bucket
.
getDocCount
();
System
.
out
.
println
(
"docCount:"
+
docCount
);
Aggregations
aggregations1
=
bucket
.
getAggregations
();
Avg
avg_price
=
aggregations1
.
get
(
"avg_price"
);
double
value
=
avg_price
.
getValue
();
System
.
out
.
println
(
"value:"
+
value
);
System
.
out
.
println
(
"================================="
);
}
}
}
\ No newline at end of file
src/test/java/es_04_agg/TestAggs_03.java
0 → 100644
浏览文件 @
c5c6ec5a
package
es_04_agg
;
import
org.elasticsearch.action.search.SearchRequest
;
import
org.elasticsearch.action.search.SearchResponse
;
import
org.elasticsearch.client.RequestOptions
;
import
org.elasticsearch.client.RestHighLevelClient
;
import
org.elasticsearch.index.query.QueryBuilders
;
import
org.elasticsearch.search.aggregations.AggregationBuilders
;
import
org.elasticsearch.search.aggregations.Aggregations
;
import
org.elasticsearch.search.aggregations.bucket.terms.Terms
;
import
org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder
;
import
org.elasticsearch.search.aggregations.metrics.*
;
import
org.elasticsearch.search.builder.SearchSourceBuilder
;
import
org.junit.Test
;
import
org.junit.runner.RunWith
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.boot.test.context.SpringBootTest
;
import
org.springframework.test.context.junit4.SpringRunner
;
import
java.io.IOException
;
import
java.util.List
;
/**
* 按照颜色分组,计算每个颜色卖出的个数,以及每个颜色卖出的平均值、最大值、最小值、总和。
*
* @author : qinyingjie
* @version : 2.2.0
* @date : 2023/5/13 20:54
*/
@SpringBootTest
@RunWith
(
SpringRunner
.
class
)
public
class
TestAggs_03
{
@Autowired
RestHighLevelClient
client
;
@Test
public
void
testAggsAndMore
()
throws
IOException
{
// GET /tvs/_search
// {
// "size" : 0,
// "aggs": {
// "group_by_color": {
// "terms": {
// "field": "color"
// },
// "aggs": {
// "avg_price": { "avg": { "field": "price" } },
// "min_price" : { "min": { "field": "price"} },
// "max_price" : { "max": { "field": "price"} },
// "sum_price" : { "sum": { "field": "price" } }
// }
// }
// }
// }
//1 构建请求
SearchRequest
searchRequest
=
new
SearchRequest
(
"tvs"
);
//请求体
SearchSourceBuilder
searchSourceBuilder
=
new
SearchSourceBuilder
();
searchSourceBuilder
.
size
(
0
);
searchSourceBuilder
.
query
(
QueryBuilders
.
matchAllQuery
());
TermsAggregationBuilder
termsAggregationBuilder
=
AggregationBuilders
.
terms
(
"group_by_color"
).
field
(
"color"
);
//termsAggregationBuilder里放入多个子聚合
AvgAggregationBuilder
avgAggregationBuilder
=
AggregationBuilders
.
avg
(
"avg_price"
).
field
(
"price"
);
MinAggregationBuilder
minAggregationBuilder
=
AggregationBuilders
.
min
(
"min_price"
).
field
(
"price"
);
MaxAggregationBuilder
maxAggregationBuilder
=
AggregationBuilders
.
max
(
"max_price"
).
field
(
"price"
);
SumAggregationBuilder
sumAggregationBuilder
=
AggregationBuilders
.
sum
(
"sum_price"
).
field
(
"price"
);
termsAggregationBuilder
.
subAggregation
(
avgAggregationBuilder
);
termsAggregationBuilder
.
subAggregation
(
minAggregationBuilder
);
termsAggregationBuilder
.
subAggregation
(
maxAggregationBuilder
);
termsAggregationBuilder
.
subAggregation
(
sumAggregationBuilder
);
searchSourceBuilder
.
aggregation
(
termsAggregationBuilder
);
//请求体放入请求头
searchRequest
.
source
(
searchSourceBuilder
);
//2 执行
SearchResponse
searchResponse
=
client
.
search
(
searchRequest
,
RequestOptions
.
DEFAULT
);
//3 获取结果
// {
// "key" : "红色",
// "doc_count" : 4,
// "max_price" : {
// "value" : 8000.0
// },
// "min_price" : {
// "value" : 1000.0
// },
// "avg_price" : {
// "value" : 3250.0
// },
// "sum_price" : {
// "value" : 13000.0
// }
// }
Aggregations
aggregations
=
searchResponse
.
getAggregations
();
Terms
group_by_color
=
aggregations
.
get
(
"group_by_color"
);
List
<?
extends
Terms
.
Bucket
>
buckets
=
group_by_color
.
getBuckets
();
for
(
Terms
.
Bucket
bucket
:
buckets
)
{
String
key
=
bucket
.
getKeyAsString
();
System
.
out
.
println
(
"key:"
+
key
);
long
docCount
=
bucket
.
getDocCount
();
System
.
out
.
println
(
"docCount:"
+
docCount
);
Aggregations
aggregations1
=
bucket
.
getAggregations
();
Max
max_price
=
aggregations1
.
get
(
"max_price"
);
double
maxPriceValue
=
max_price
.
getValue
();
System
.
out
.
println
(
"maxPriceValue:"
+
maxPriceValue
);
Min
min_price
=
aggregations1
.
get
(
"min_price"
);
double
minPriceValue
=
min_price
.
getValue
();
System
.
out
.
println
(
"minPriceValue:"
+
minPriceValue
);
Avg
avg_price
=
aggregations1
.
get
(
"avg_price"
);
double
avgPriceValue
=
avg_price
.
getValue
();
System
.
out
.
println
(
"avgPriceValue:"
+
avgPriceValue
);
Sum
sum_price
=
aggregations1
.
get
(
"sum_price"
);
double
sumPriceValue
=
sum_price
.
getValue
();
System
.
out
.
println
(
"sumPriceValue:"
+
sumPriceValue
);
System
.
out
.
println
(
"================================="
);
}
}
}
\ No newline at end of file
src/test/java/es_04_agg/TestAggs_04.java
0 → 100644
浏览文件 @
c5c6ec5a
package
es_04_agg
;
import
org.elasticsearch.action.search.SearchRequest
;
import
org.elasticsearch.action.search.SearchResponse
;
import
org.elasticsearch.client.RequestOptions
;
import
org.elasticsearch.client.RestHighLevelClient
;
import
org.elasticsearch.index.query.QueryBuilders
;
import
org.elasticsearch.search.aggregations.AggregationBuilders
;
import
org.elasticsearch.search.aggregations.Aggregations
;
import
org.elasticsearch.search.aggregations.bucket.histogram.*
;
import
org.elasticsearch.search.aggregations.metrics.Sum
;
import
org.elasticsearch.search.aggregations.metrics.SumAggregationBuilder
;
import
org.elasticsearch.search.builder.SearchSourceBuilder
;
import
org.junit.Test
;
import
org.junit.runner.RunWith
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.boot.test.context.SpringBootTest
;
import
org.springframework.test.context.junit4.SpringRunner
;
import
java.io.IOException
;
import
java.util.List
;
/**
* 按照售价每2000价格划分范围,算出每个区间的销售总额 histogram
*
* @author : qinyingjie
* @version : 2.2.0
* @date : 2023/5/13 20:54
*/
@SpringBootTest
@RunWith
(
SpringRunner
.
class
)
public
class
TestAggs_04
{
@Autowired
RestHighLevelClient
client
;
@Test
public
void
testAggsAndHistogram
()
throws
IOException
{
// GET /tvs/_search
// {
// "size" : 0,
// "aggs":{
// "by_histogram":{
// "histogram":{
// "field": "price",
// "interval": 2000
// },
// "aggs":{
// "income": {
// "sum": {
// "field" : "price"
// }
// }
// }
// }
// }
// }
//1 构建请求
SearchRequest
searchRequest
=
new
SearchRequest
(
"tvs"
);
//请求体
SearchSourceBuilder
searchSourceBuilder
=
new
SearchSourceBuilder
();
searchSourceBuilder
.
size
(
0
);
searchSourceBuilder
.
query
(
QueryBuilders
.
matchAllQuery
());
HistogramAggregationBuilder
histogramAggregationBuilder
=
AggregationBuilders
.
histogram
(
"by_histogram"
).
field
(
"price"
).
interval
(
2000
);
SumAggregationBuilder
sumAggregationBuilder
=
AggregationBuilders
.
sum
(
"income"
).
field
(
"price"
);
histogramAggregationBuilder
.
subAggregation
(
sumAggregationBuilder
);
searchSourceBuilder
.
aggregation
(
histogramAggregationBuilder
);
//请求体放入请求头
searchRequest
.
source
(
searchSourceBuilder
);
//2 执行
SearchResponse
searchResponse
=
client
.
search
(
searchRequest
,
RequestOptions
.
DEFAULT
);
//3 获取结果
// {
// "key" : 0.0,
// "doc_count" : 3,
// income" : {
// "value" : 3700.0
// }
// }
Aggregations
aggregations
=
searchResponse
.
getAggregations
();
Histogram
group_by_color
=
aggregations
.
get
(
"by_histogram"
);
List
<?
extends
Histogram
.
Bucket
>
buckets
=
group_by_color
.
getBuckets
();
for
(
Histogram
.
Bucket
bucket
:
buckets
)
{
String
keyAsString
=
bucket
.
getKeyAsString
();
System
.
out
.
println
(
"keyAsString:"
+
keyAsString
);
long
docCount
=
bucket
.
getDocCount
();
System
.
out
.
println
(
"docCount:"
+
docCount
);
Aggregations
aggregations1
=
bucket
.
getAggregations
();
Sum
income
=
aggregations1
.
get
(
"income"
);
double
value
=
income
.
getValue
();
System
.
out
.
println
(
"value:"
+
value
);
System
.
out
.
println
(
"================================="
);
}
}
}
\ No newline at end of file
src/test/java/es_04_agg/TestAggs_05.java
0 → 100644
浏览文件 @
c5c6ec5a
package
es_04_agg
;
import
org.elasticsearch.action.search.SearchRequest
;
import
org.elasticsearch.action.search.SearchResponse
;
import
org.elasticsearch.client.RequestOptions
;
import
org.elasticsearch.client.RestHighLevelClient
;
import
org.elasticsearch.index.query.QueryBuilders
;
import
org.elasticsearch.search.aggregations.AggregationBuilders
;
import
org.elasticsearch.search.aggregations.Aggregations
;
import
org.elasticsearch.search.aggregations.bucket.histogram.*
;
import
org.elasticsearch.search.aggregations.metrics.Sum
;
import
org.elasticsearch.search.aggregations.metrics.SumAggregationBuilder
;
import
org.elasticsearch.search.builder.SearchSourceBuilder
;
import
org.junit.Test
;
import
org.junit.runner.RunWith
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.boot.test.context.SpringBootTest
;
import
org.springframework.test.context.junit4.SpringRunner
;
import
java.io.IOException
;
import
java.util.List
;
/**
* 计算每个季度的销售总额
*
* @author : qinyingjie
* @version : 2.2.0
* @date : 2023/5/13 20:54
*/
@SpringBootTest
@RunWith
(
SpringRunner
.
class
)
public
class
TestAggs_05
{
@Autowired
RestHighLevelClient
client
;
@Test
public
void
testAggsAndDateHistogram
()
throws
IOException
{
// GET /tvs/_search
// {
// "size" : 0,
// "aggs": {
// "sales": {
// "date_histogram": {
// "field": "sold_date",
// "interval": "quarter",
// "format": "yyyy-MM-dd",
// "min_doc_count" : 0,
// "extended_bounds" : {
// "min" : "2019-01-01",
// "max" : "2020-12-31"
// }
// },
// "aggs": {
// "income": {
// "sum": {
// "field": "price"
// }
// }
// }
// }
// }
// }
//1 构建请求
SearchRequest
searchRequest
=
new
SearchRequest
(
"tvs"
);
//请求体
SearchSourceBuilder
searchSourceBuilder
=
new
SearchSourceBuilder
();
searchSourceBuilder
.
size
(
0
);
searchSourceBuilder
.
query
(
QueryBuilders
.
matchAllQuery
());
DateHistogramAggregationBuilder
dateHistogramAggregationBuilder
=
AggregationBuilders
.
dateHistogram
(
"date_histogram"
).
field
(
"sold_date"
).
calendarInterval
(
DateHistogramInterval
.
QUARTER
)
.
format
(
"yyyy-MM-dd"
).
minDocCount
(
0
).
extendedBounds
(
new
ExtendedBounds
(
"2019-01-01"
,
"2020-12-31"
));
SumAggregationBuilder
sumAggregationBuilder
=
AggregationBuilders
.
sum
(
"income"
).
field
(
"price"
);
dateHistogramAggregationBuilder
.
subAggregation
(
sumAggregationBuilder
);
searchSourceBuilder
.
aggregation
(
dateHistogramAggregationBuilder
);
//请求体放入请求头
searchRequest
.
source
(
searchSourceBuilder
);
//2 执行
SearchResponse
searchResponse
=
client
.
search
(
searchRequest
,
RequestOptions
.
DEFAULT
);
//3 获取结果
// {
// "key_as_string" : "2019-01-01",
// "key" : 1546300800000,
// "doc_count" : 0,
// "income" : {
// "value" : 0.0
// }
// }
Aggregations
aggregations
=
searchResponse
.
getAggregations
();
ParsedDateHistogram
date_histogram
=
aggregations
.
get
(
"date_histogram"
);
List
<?
extends
Histogram
.
Bucket
>
buckets
=
date_histogram
.
getBuckets
();
for
(
Histogram
.
Bucket
bucket
:
buckets
)
{
String
keyAsString
=
bucket
.
getKeyAsString
();
System
.
out
.
println
(
"keyAsString:"
+
keyAsString
);
long
docCount
=
bucket
.
getDocCount
();
System
.
out
.
println
(
"docCount:"
+
docCount
);
Aggregations
aggregations1
=
bucket
.
getAggregations
();
Sum
income
=
aggregations1
.
get
(
"income"
);
double
value
=
income
.
getValue
();
System
.
out
.
println
(
"value:"
+
value
);
System
.
out
.
println
(
"===================="
);
}
}
}
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录