文章目录

  • 五、SpringBoot整合
    • 1.基本步骤
    • 2.保存数据
    • 3.测试复杂检索

五、SpringBoot整合

选择Java High Level REST Client

官方文档:Java REST Client [7.17] | Elastic]

1.基本步骤

导入依赖rest-high-level-client

<dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId><version>7.4.2</version>
</dependency>

由于springboot对elasticsearch有默认版本管理,

所以我们修改一下springboot的默认配置

编写配置类

package com.henu.soft.merist.search.config;import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class GulimallElasticSearchConfig {//可以构建授权请求头信息public static final RequestOptions COMMON_OPTIONS;static {RequestOptions.Builder builder = RequestOptions.DEFAULT.toBuilder();/*builder.addHeader("Authorization", "Bearer " + TOKEN); builder.setHttpAsyncResponseConsumerFactory(           new HttpAsyncResponseConsumerFactory.HeapBufferedResponseConsumerFactory(30 * 1024 * 1024 * 1024));*/COMMON_OPTIONS = builder.build();}@Beanpublic RestHighLevelClient esRestClient(){RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost("IP/localhost", 9200, "http")));return client;}
}

2.保存数据

首先导包 用来将数据转成json

<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>2.0.9</version>
</dependency>
 /*** 测试保存数据*/@Testpublic void indexData() throws IOException {//新建一个索引来保存数据IndexRequest indexRequest = new IndexRequest("games");indexRequest.id("1");Game game = new Game();game.setName("杀戮尖塔");game.setType("卡牌肉鸽");game.setGrade(100);String jsonString = JSON.toJSONString(game);indexRequest.source(jsonString,XContentType.JSON);IndexResponse reponse = client.index(indexRequest, GulimallElasticSearchConfig.COMMON_OPTIONS);System.out.println(reponse);System.out.println(reponse.toString());}@Dataclass Game{private String name;private String type;private Integer grade;}

3.测试复杂检索

@Testpublic void searchData() throws IOException {//1.创建检索请求SearchRequest searchRequest = new SearchRequest();//2.指定索引searchRequest.indices("bank");//3.查询条件构建SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();//3.1查询//各种根操作都能在查询条件种创建
//        searchSourceBuilder.from();
//        searchSourceBuilder.size();
//        searchSourceBuilder.timeout();searchSourceBuilder.query(QueryBuilders.matchAllQuery());//3.2聚合//按照年龄值分布聚合TermsAggregationBuilder agaAgg = AggregationBuilders.terms("agaAgg").field("aga").size(10);searchSourceBuilder.aggregation(agaAgg);//按照薪资聚合求均值TermsAggregationBuilder balanceAgg = AggregationBuilders.terms("balanceAgg").field("balance").size(10);searchSourceBuilder.aggregation(balanceAgg);//4.组合查询条件searchRequest.source(searchSourceBuilder);//5.执行查询SearchResponse response = client.search(searchRequest, RequestOptions.DEFAULT);//6.解析结果(Hits 和 聚合的值)//6.1获取所有查到的数据//拿到外边的hitsSearchHits hits = response.getHits();//拿到里面的hitsSearchHit[] dataHits = hits.getHits();for (SearchHit dataHit : dataHits) {String id = dataHit.getId();String index = dataHit.getIndex();float score = dataHit.getScore();String type = dataHit.getType();long seqNo = dataHit.getSeqNo();//也可以直接将返回的json数据转成map输出Map<String, Object> sourceAsMap = dataHit.getSourceAsMap();System.out.println(id+"---"+index+"---"+score+"---"+type+"---"+seqNo);System.out.println(sourceAsMap);}System.out.println(response);}

查询的数据

1---bank------account----2
{account_number=1, firstname=Amber, address=880 Holmes Lane, balance=39225, gender=M, city=Brogan, employer=Pyrami, state=IL, age=32, email=amberduke@pyrami.com, lastname=Duke}
6---bank------account----2
{account_number=6, firstname=Hattie, address=671 Bristol Street, balance=5686, gender=M, city=Dante, employer=Netagy, state=TN, age=36, email=hattiebond@netagy.com, lastname=Bond}
13---bank------account----2
{account_number=13, firstname=Nanette, address=789 Madison Street, balance=32838, gender=F, city=Nogal, employer=Quility, state=VA, age=28, email=nanettebates@quility.com, lastname=Bates}
18---bank------account----2
{account_number=18, firstname=Dale, address=467 Hutchinson Court, balance=4180, gender=M, city=Orick, employer=Boink, state=MD, age=33, email=daleadams@boink.com, lastname=Adams}
20---bank------account----2
{account_number=20, firstname=Elinor, address=282 Kings Place, balance=16418, gender=M, city=Ribera, employer=Scentric, state=WA, age=36, email=elinorratliff@scentric.com, lastname=Ratliff}
25---bank------account----2
{account_number=25, firstname=Virginia, address=171 Putnam Avenue, balance=40540, gender=F, city=Nicholson, employer=Filodyne, state=PA, age=39, email=virginiaayala@filodyne.com, lastname=Ayala}
32---bank------account----2
{account_number=32, firstname=Dillard, address=702 Quentin Street, balance=48086, gender=F, city=Veguita, employer=Quailcom, state=IN, age=34, email=dillardmcpherson@quailcom.com, lastname=Mcpherson}
37---bank------account----2
{account_number=37, firstname=Mcgee, address=826 Fillmore Place, balance=18612, gender=M, city=Tooleville, employer=Reversus, state=OK, age=39, email=mcgeemooney@reversus.com, lastname=Mooney}
44---bank------account----2
{account_number=44, firstname=Aurelia, address=502 Baycliff Terrace, balance=34487, gender=M, city=Yardville, employer=Orbalix, state=DE, age=37, email=aureliaharding@orbalix.com, lastname=Harding}
49---bank------account----2
{account_number=49, firstname=Fulton, address=451 Humboldt Street, balance=29104, gender=F, city=Sunriver, employer=Anocha, state=RI, age=23, email=fultonholt@anocha.com, lastname=Holt}
{"took":62,"timed_out":false,"_shards":{"total":1,"successful":1,"skipped":0,"failed":0},"hits":{"total":{"value":1000,"relation":"eq"},"max_score":1.0,"hits":[{"_index":"bank","_type":"account","_id":"1","_score":1.0,"_source":{"account_number":1,"balance":39225,"firstname":"Amber","lastname":"Duke","age":32,"gender":"M","address":"880 Holmes Lane","employer":"Pyrami","email":"amberduke@pyrami.com","city":"Brogan","state":"IL"}},{"_index":"bank","_type":"account","_id":"6","_score":1.0,"_source":{"account_number":6,"balance":5686,"firstname":"Hattie","lastname":"Bond","age":36,"gender":"M","address":"671 Bristol Street","employer":"Netagy","email":"hattiebond@netagy.com","city":"Dante","state":"TN"}},{"_index":"bank","_type":"account","_id":"13","_score":1.0,"_source":{"account_number":13,"balance":32838,"firstname":"Nanette","lastname":"Bates","age":28,"gender":"F","address":"789 Madison Street","employer":"Quility","email":"nanettebates@quility.com","city":"Nogal","state":"VA"}},{"_index":"bank","_type":"account","_id":"18","_score":1.0,"_source":{"account_number":18,"balance":4180,"firstname":"Dale","lastname":"Adams","age":33,"gender":"M","address":"467 Hutchinson Court","employer":"Boink","email":"daleadams@boink.com","city":"Orick","state":"MD"}},{"_index":"bank","_type":"account","_id":"20","_score":1.0,"_source":{"account_number":20,"balance":16418,"firstname":"Elinor","lastname":"Ratliff","age":36,"gender":"M","address":"282 Kings Place","employer":"Scentric","email":"elinorratliff@scentric.com","city":"Ribera","state":"WA"}},{"_index":"bank","_type":"account","_id":"25","_score":1.0,"_source":{"account_number":25,"balance":40540,"firstname":"Virginia","lastname":"Ayala","age":39,"gender":"F","address":"171 Putnam Avenue","employer":"Filodyne","email":"virginiaayala@filodyne.com","city":"Nicholson","state":"PA"}},{"_index":"bank","_type":"account","_id":"32","_score":1.0,"_source":{"account_number":32,"balance":48086,"firstname":"Dillard","lastname":"Mcpherson","age":34,"gender":"F","address":"702 Quentin Street","employer":"Quailcom","email":"dillardmcpherson@quailcom.com","city":"Veguita","state":"IN"}},{"_index":"bank","_type":"account","_id":"37","_score":1.0,"_source":{"account_number":37,"balance":18612,"firstname":"Mcgee","lastname":"Mooney","age":39,"gender":"M","address":"826 Fillmore Place","employer":"Reversus","email":"mcgeemooney@reversus.com","city":"Tooleville","state":"OK"}},{"_index":"bank","_type":"account","_id":"44","_score":1.0,"_source":{"account_number":44,"balance":34487,"firstname":"Aurelia","lastname":"Harding","age":37,"gender":"M","address":"502 Baycliff Terrace","employer":"Orbalix","email":"aureliaharding@orbalix.com","city":"Yardville","state":"DE"}},{"_index":"bank","_type":"account","_id":"49","_score":1.0,"_source":{"account_number":49,"balance":29104,"firstname":"Fulton","lastname":"Holt","age":23,"gender":"F","address":"451 Humboldt Street","employer":"Anocha","email":"fultonholt@anocha.com","city":"Sunriver","state":"RI"}}]},"aggregations":{"lterms#balanceAgg":{"doc_count_error_upper_bound":0,"sum_other_doc_count":985,"buckets":[{"key":22026,"doc_count":2},{"key":23285,"doc_count":2},{"key":36038,"doc_count":2},{"key":39063,"doc_count":2},{"key":45493,"doc_count":2},{"key":1011,"doc_count":1},{"key":1031,"doc_count":1},{"key":1110,"doc_count":1},{"key":1133,"doc_count":1},{"key":1172,"doc_count":1}]},"sterms#agaAgg":{"doc_count_error_upper_bound":0,"sum_other_doc_count":0,"buckets":[]}}}

Elasticsearch学习2 SpringBoot整合 测试复杂检索相关推荐

  1. netty框架学习及springboot整合集成

    netty框架学习及springboot整合集成 1. Netty基本概念 2. Netty框架 2.1 Netty框架结构 2.1 Netty NIO 2.2 Reactor线程模型 3. Spri ...

  2. Java学习之SpringBoot整合SSM Demo

    背景:在Java Web中Spring家族有着很重要的地位,之前JAVA开发需要做很多的配置,一堆的配置文件和部署调试一直是JavaWeb开发中的一大诟病,但现在Spring推出了SpringBoot ...

  3. activeMQ基础学习和SpringBoot整合activeMQ案例

    昨天仔细研究了activeMQ消息队列,也遇到了些坑,昨天晚上也写了篇文章记录坑的内容,其实上篇文章(SpringBoot整合activeMQ消息队列手动签收(Session.CLIENT_ACKNO ...

  4. Https双向验证与Springboot整合测试-人来人往我只认你

    1 简介 不知不觉Https相关的文章已经写了6篇了,本文将是这个专题的最后一篇,起码近期是最后一篇.前面6篇讲的全都是单向的Https验证,本文将重点介绍一下双向验证.有兴趣的同学可以了解一下之前的 ...

  5. ElasticSearch学习:springboot集成ElasticSearch

    跟其他的菲关系类型数据库一样集成springboot,在生成代码时,勾选web和非关系数据库里面的ElasticSearch就可以. demo的git地址我放在下面: git es demo 代码 这 ...

  6. 【elasticsearch系列】SpringBoot整合elasticsearch客户端

    目录 文档 ElasticSearch Head 实践 踩坑点 文档 Elasticsearch: 权威指南 Java REST Client 可以跟着官网示例写demo 工欲善其事必先利其器,对于E ...

  7. Elasticsearch安装及SpringBoot整合ElasticSearch

    一.Elasticsearch基本概念 Elasticsearch也是基于Lucene的全文检索库,本质也是存储数据,很多概念与MySQL类似的 1).对比关系 索引库(indices)->Da ...

  8. SpringBoot整合ElasticSearch实现多版本的兼容

    前言 在上一篇学习SpringBoot中,整合了Mybatis.Druid和PageHelper并实现了多数据源的操作.本篇主要是介绍和使用目前最火的搜索引擎ElastiSearch,并和Spring ...

  9. Redis学习笔记(二)SpringBoot整合

    Redis学习笔记(二) SpringBoot整合 测试 导入依赖 查看底层 配置连接 测试连接 自定义`RedisTemplate` 在开发中,一般都是以json来传输对象: 所以实际开发中所有对象 ...

最新文章

  1. console.log 简写
  2. 一步一步教你如何用python做词云_一步一步教你如何用Python做词云
  3. filter,map,reduce,apply函数
  4. shell变量里的字符替换
  5. DIV Scroll属性
  6. (操作系统题目题型总结)第五章:设备管理
  7. 中南大学计算机学院夏令营2021,baihhh
  8. MySQL主从复制架构转换MGR架构(手动版)
  9. 系统学习 TypeScript(五)——联合类型
  10. android q beta3更新功能,Android Q Beta 3更新内容:拥抱5G和可折叠设备
  11. STM32入门(一)Keil5软件安装以及使用
  12. 2015年全国大学生电子设计大赛综合测评题
  13. 同济大学计算机专业辅修声乐,同济大学关于本科生修读辅修专业的管理办法
  14. 上海康桥先进制造技术创业园项目远程预付费系统的应用-安科瑞耿敏花
  15. 读书寄语:这一年,谢谢自己
  16. android 获取快捷开关_6款快捷开关式实用安卓小插件推荐 简化Android设备操作
  17. 英雄联盟一直连接不上服务器连接异常,lol服务器连接异常 英雄联盟老是与客户端失去连接...
  18. 计算机学院谭钊琦,中山大学南方学院-电气与计算机工程学院
  19. 5.4 创建 WBS
  20. 全国计算机noi,【坑爹】中国计算机学会关于CCF NOI省内选拔的若干规定

热门文章

  1. 22、Java——汽车租赁系统(对象+集合)
  2. 工业企业危险源管理和应急管理解决方案
  3. 如何用js源生写计时器
  4. android架构师解压密码,咕泡Java架构师第三期完整版
  5. 报错:HTTP 401 Unauthorized
  6. android 调用系统图库剪切图片出现黑屏闪退
  7. 如何运用netoffice,开发兼容多个版本的outlook插件
  8. arduinorgb三色灯_Arduino教程2.2-RGB-LED灯以及PWM
  9. VMware Workstation 9 + Mac OS X 10.8
  10. pyboard 实验遥控LED灯