【ElasticSearch】RestHighLevelClient方式对ES进行操作(三)

阅读: 评论:0

【ElasticSearch】RestHighLevelClient方式对ES进行操作(三)

【ElasticSearch】RestHighLevelClient方式对ES进行操作(三)


使用 RestHighLevelClient 对ES进行操作(三)


目录

  • 使用 RestHighLevelClient 对ES进行操作(三)
    • 环境准备
    • 3.0 查询所有
    • 3.1 等值查询 =
    • 3.2 多值查询 in
    • 3.3 范围查询
    • 3.4 模糊查询
    • 3.5 通配符模糊查询
    • 3.6 统计查询(最大、最小、平均、求和)
    • 3.7 去重
    • 3.8 分组聚合
    • 3.9 分组排序
    • 3.10 多值分组聚合


上文【ElasticSearch】spring-data方式操作elasticsearch(一) 的延续


环境准备


1.添加依赖

<!-- 添加 elasticsearch 客户端 -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>

2.添加ES配置

#使用模板方式
spring:elasticsearch:rest:uris:- localhost:9200

3.添加测试模拟数据:

[{"addr":"香港","age":45,"birthDay":"1977-01-01","interest":"赛车","name":"吴彦祖","professional":"演员","uid":1},{"addr":"大陆","age":55,"birthDay":"1967-01-01","interest":"演戏","name":"吴奇隆","professional":"歌手","uid":2},{"addr":"大陆","age":45,"birthDay":"1977-01-01","interest":"武术","name":"吴京","professional":"武打演员","uid":3},{"addr":"香港","age":55,"birthDay":"1967-01-01","interest":"唱歌","name":"古天乐","professional":"演员","uid":4},{"addr":"大陆","age":35,"birthDay":"1987-01-01","interest":"跑步","name":"苏炳添","professional":"运动员","uid":5},{"addr":"大陆","age":30,"birthDay":"1992-01-01","interest":"演戏","name":"刘亦菲","professional":"歌手","uid":6},{"addr":"大陆","age":30,"birthDay":"1992-01-01","interest":"健身","name":"刘翔","professional":"运动员","uid":7},{"addr":"香港","age":45,"birthDay":"1977-01-01","interest":"唱歌","name":"张家辉","professional":"演员","uid":8},{"addr":"大陆","age":45,"birthDay":"1977-01-01","interest":"唱歌","name":"毛不易","professional":"歌手","uid":9}
]

3.0 查询所有

/*** @Description: * 使用 client方式* @author: TianwYam* @date 2022年3月23日 下午9:47:23*/
@SpringBootTest
public class PeopleTestUseClient {@Autowiredprivate RestHighLevelClient esClient ;@Testpublic void getAll() throws Exception {SearchRequest searchRequest = new SearchRequest("people_index");SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();System.out.println("参数:");System.out.println(sourceBuilder);searchRequest.source(sourceBuilder);SearchResponse response = esClient.search(searchRequest, RequestOptions.DEFAULT);System.out.println("结果:");System.out.JSONString(response, true));}}

3.1 等值查询 =

@Test
public void where() throws Exception {// 类似:select * from people where age = 45SearchRequest searchRequest = new SearchRequest("people_index");SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();sourceBuilder.Query("age", 45));System.out.println("参数:");System.out.JSONString(JSON.String()), true));searchRequest.source(sourceBuilder);SearchResponse response = esClient.search(searchRequest, RequestOptions.DEFAULT);System.out.println("结果:");System.out.JSONString(response, true));
}

类似SQL:

select * from people where age = 45

URL查询:

{"query":{"term":{"age":{"boost":1.0,"value":45}}}
}

3.2 多值查询 in

@Test
public void in() throws Exception {// 类似:select * from people where professional in ('演员', '歌手')SearchRequest searchRequest = new SearchRequest("people_index");SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();sourceBuilder.sQuery("professional.keyword", Arrays.asList("演员","歌手")));System.out.println("参数:");System.out.JSONString(JSON.String()), true));searchRequest.source(sourceBuilder);SearchResponse response = esClient.search(searchRequest, RequestOptions.DEFAULT);System.out.println("结果:");System.out.JSONString(response, true));
}

类似SQL:

select * from people where professional in ('演员', '歌手')

URL:

{"query":{"terms":{"professional.keyword":["演员","歌手"],"boost":1.0}}
}

3.3 范围查询

@Test
public void betweenAnd() throws Exception {// 类似:select * from people where age between 50 and 55SearchRequest searchRequest = new SearchRequest("people_index");SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();//		sourceBuilder.query(QueryBuilders.rangeQuery("age").from(50).to(55));//  50 < age <= 55sourceBuilder.query(QueryBuilders.rangeQuery("age").gt(50).lte(55));System.out.println("参数:");System.out.JSONString(JSON.String()), true));searchRequest.source(sourceBuilder);SearchResponse response = esClient.search(searchRequest, RequestOptions.DEFAULT);System.out.println("结果:");System.out.JSONString(response, true));
}

类似SQL:

select * from people where age between 50 and 55

URL:

{"query":{"range":{"age":{"include_lower":false,"include_upper":true,"from":50,"boost":1.0,"to":55}}}
}

3.4 模糊查询

@Test
public void likeLeft() throws Exception {// 类似:select * from people where professional like '武打%'SearchRequest searchRequest = new SearchRequest("people_index");SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();sourceBuilder.query(QueryBuilders.prefixQuery("professional.keyword", "武打"));System.out.println("参数:");System.out.JSONString(JSON.String()), true));searchRequest.source(sourceBuilder);SearchResponse response = esClient.search(searchRequest, RequestOptions.DEFAULT);System.out.println("结果:");System.out.JSONString(response, true));
}

类似SQL:

select * from people where professional like '武打%'

URL:

{"query":{"prefix":{"professional.keyword":{"boost":1.0,"value":"武打"}}}
}

3.5 通配符模糊查询

@Test
public void likeAny() throws Exception {// 类似:select * from people where professional like '%打%员'SearchRequest searchRequest = new SearchRequest("people_index");SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();// 通配符模糊查询sourceBuilder.query(QueryBuilders.wildcardQuery("professional.keyword", "*打*员"));System.out.println("参数:");System.out.JSONString(JSON.String()), true));searchRequest.source(sourceBuilder);SearchResponse response = esClient.search(searchRequest, RequestOptions.DEFAULT);System.out.println("结果:");System.out.JSONString(response, true));
}

类似SQL:

select * from people where professional like '%打%员'

URL:

{"query":{"wildcard":{"professional.keyword":{"boost":1.0,"wildcard":"*打*员"}}}
}

3.6 统计查询(最大、最小、平均、求和)


maxminavgsumcount等
@Test
public void max() throws Exception {// 类似:select max(age) as ageMax from people SearchRequest searchRequest = new SearchRequest("people_index");SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();sourceBuilder.size(0);sourceBuilder.aggregation(AggregationBuilders.max("ageMax").field("age"));System.out.println("参数:");System.out.JSONString(JSON.String()), true));searchRequest.source(sourceBuilder);SearchResponse response = esClient.search(searchRequest, RequestOptions.DEFAULT);System.out.println("结果:");System.out.JSONString(response, true));
}

类似SQL:

select max(age) as ageMax from people

URL:

{"size":0,"aggregations":{"ageMax":{"max":{"field":"age"}}}
}

3.7 去重

@Test
public void distinct() throws Exception {// 类似:select count(distinct uid) as uidCount from people SearchRequest searchRequest = new SearchRequest("people_index");SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();sourceBuilder.size(0);sourceBuilder.aggregation(AggregationBuilders.cardinality("uidCount").field("uid"));System.out.println("参数:");System.out.JSONString(JSON.String()), true));searchRequest.source(sourceBuilder);SearchResponse response = esClient.search(searchRequest, RequestOptions.DEFAULT);System.out.println("结果:");System.out.JSONString(response, true));
}

类似SQL:

select count(distinct uid) as uidCount from people 

URL:

{"size":0,"aggregations":{"uidCount":{"cardinality":{"field":"uid"}}}
}

3.8 分组聚合

@Test
public void groupBy() throws Exception {// 类似:select age, count(*) from people group by ageSearchRequest searchRequest = new SearchRequest("people_index");SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();sourceBuilder.size(0);sourceBuilder.s("ageGroup").field("age"));System.out.println("参数:");System.out.JSONString(JSON.String()), true));searchRequest.source(sourceBuilder);SearchResponse response = esClient.search(searchRequest, RequestOptions.DEFAULT);System.out.println("结果:");System.out.JSONString(response, true));
}

l类似SQL:

select age, count(*) from people group by age

URL:

{"size":0,"aggregations":{"ageGroup":{"terms":{"shard_min_doc_count":0,"field":"age","size":10,"show_term_doc_count_error":false,"min_doc_count":1,"order":[{"_count":"desc"},{"_key":"asc"}]}}}
}

3.9 分组排序

@Test
public void groupByOrder() throws Exception {// 类似:select age as key , count(*) as count from people group by age order by count asc, key descSearchRequest searchRequest = new SearchRequest("people_index");SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();sourceBuilder.size(0);sourceBuilder.s("ageGroup").field("age").order(unt(true), BucketOrder.key(false))));//		sourceBuilder.s("ageGroup").field("age").order(BucketOrder.key(false)));System.out.println("参数:");System.out.JSONString(JSON.String()), true));searchRequest.source(sourceBuilder);SearchResponse response = esClient.search(searchRequest, RequestOptions.DEFAULT);System.out.println("结果:");System.out.JSONString(response, true));
}

类似SQL:

select age as key , count(*) as count 
from people group by age 
order by count asc, key desc

URL:

{"size":0,"aggregations":{"ageGroup":{"terms":{"shard_min_doc_count":0,"field":"age","size":10,"show_term_doc_count_error":false,"min_doc_count":1,"order":[{"_count":"asc"},{"_key":"desc"}]}}}
}

3.10 多值分组聚合

@Test
public void groupByMore() throws Exception {// 类似:select age , professional, count(*) as count from people group by age, professionalSearchRequest searchRequest = new SearchRequest("people_index");SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();sourceBuilder.size(0);sourceBuilder.s("ageGroup").field("age").s("profGroup").field("professional.keyword")));//		sourceBuilder.s("ageGroup").field("age").order(BucketOrder.key(false)));System.out.println("参数:");System.out.JSONString(JSON.String()), true));searchRequest.source(sourceBuilder);SearchResponse response = esClient.search(searchRequest, RequestOptions.DEFAULT);System.out.println("结果:");System.out.println(response);//		System.out.JSONString(response, true));
}

l类似SQL:

select age , professional, count(*) as count 
from people 
group by age, professional

URL:

{"size":0,"aggregations":{"ageGroup":{"terms":{"shard_min_doc_count":0,"field":"age","size":10,"show_term_doc_count_error":false,"min_doc_count":1,"order":[{"_count":"desc"},{"_key":"asc"}]},"aggregations":{"profGroup":{"terms":{"shard_min_doc_count":0,"field":"professional.keyword","size":10,"show_term_doc_count_error":false,"min_doc_count":1,"order":[{"_count":"desc"},{"_key":"asc"}]}}}}}
}

本文发布于:2024-02-04 05:08:13,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170699770652337.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23