Elastic Stack:es JavaApi搜索入门
一.入门API
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | @SpringBootTest (classes = SearchApplication. class ) @RunWith (SpringRunner. class ) public class TestSearch { @Qualifier ( "restHighLevelClient" ) @Autowired RestHighLevelClient client; @Test public void testSearchAll() throws IOException { //构建搜索请求 SearchRequest request = new SearchRequest( "book" ); //构建搜索请求体 SearchSourceBuilder builder = new SearchSourceBuilder(); builder.query(QueryBuilders.matchAllQuery()); //第一个参数:包含哪些字段 第二个参数:排除哪些字段 builder.fetchSource( new String[]{}, new String[]{ "pic" , "timestamp" }); request.source(builder); //执行搜索请求 SearchResponse response = client.search(request, RequestOptions.DEFAULT); //获取结果 SearchHits hits = response.getHits(); SearchHit[] hits1 = hits.getHits(); Arrays.asList(hits1).forEach(hit->{ System.out.println(hit.getId()); System.out.println(hit.getScore()); Map<String, Object> map = hit.getSourceAsMap(); map.forEach((x,y)-> System.out.println(x+ ":" +y)); System.out.println( "==========" ); }); } } |
二.常用方法
分页:
1 2 | builder.from( 0 ); builder.size( 2 ); |
ids查询:
1 | builder.query(QueryBuilders.idsQuery().addIds( "1" , "3" , "5" )); |
match搜索:
1 | builder.query(QueryBuilders.matchQuery( "name" , "java编程" )); |
multi_match搜索:
第一个参数:查询的关键字
后面的参数:查询的字段
1 | builder.query(QueryBuilders.multiMatchQuery( "java" , "name" , "description" )); |
三.bool query查询
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | @Test public void testSearchBool() throws IOException { //构建搜索请求 SearchRequest request = new SearchRequest( "book" ); //构建搜索请求体 SearchSourceBuilder builder = new SearchSourceBuilder(); //构建bool BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery(); boolQueryBuilder.must(QueryBuilders.matchQuery( "description" , "java" )); boolQueryBuilder.should(QueryBuilders.matchQuery( "name" , "开发" )); builder.query(boolQueryBuilder); //第一个参数:包含哪些字段 第二个参数:排除哪些字段 builder.fetchSource( new String[]{}, new String[]{ "pic" , "timestamp" }); request.source(builder); //执行搜索请求 SearchResponse response = client.search(request, RequestOptions.DEFAULT); //获取结果 SearchHits hits = response.getHits(); SearchHit[] hits1 = hits.getHits(); Arrays.asList(hits1).forEach(hit->{ System.out.println(hit.getId()); System.out.println(hit.getScore()); Map<String, Object> map = hit.getSourceAsMap(); map.forEach((x,y)-> System.out.println(x+ ":" +y)); System.out.println( "==========" ); }); } |
filter:
1 | boolQueryBuilder.filter(QueryBuilders.rangeQuery( "price" ).gte( "50" ).lte( "90" )); |
四.sort排序
按照价格降序
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | @Test public void testSearchSort() throws IOException { //构建搜索请求 SearchRequest request = new SearchRequest( "book" ); //构建搜索请求体 SearchSourceBuilder builder = new SearchSourceBuilder(); builder.query(QueryBuilders.matchAllQuery()); //第一个参数:包含哪些字段 第二个参数:排除哪些字段 builder.fetchSource( new String[]{}, new String[]{ "pic" , "timestamp" }); //排序 builder.sort( "price" , SortOrder.DESC); request.source(builder); //执行搜索请求 SearchResponse response = client.search(request, RequestOptions.DEFAULT); //获取结果 SearchHits hits = response.getHits(); SearchHit[] hits1 = hits.getHits(); Arrays.asList(hits1).forEach(hit->{ System.out.println(hit.getId()); System.out.println(hit.getScore()); Map<String, Object> map = hit.getSourceAsMap(); map.forEach((x,y)-> System.out.println(x+ ":" +y)); System.out.println( "==========" ); }); } |
标签:
Elastic Stack
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix