SpringBoot框架如何集成ElasticSearch
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章主要为大家展示了"SpringBoot框架如何集成ElasticSearch",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"SpringBoot框架
千家信息网最后更新 2026年11月03日SpringBoot框架如何集成ElasticSearch
这篇文章主要为大家展示了"SpringBoot框架如何集成ElasticSearch",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"SpringBoot框架如何集成ElasticSearch"这篇文章吧。
依赖
SpringBoot版本:2.4.2
org.projectlombok lombok true org.springframework.boot spring-boot-starter-data-elasticsearch org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-devtools true true com.alibaba fastjson 1.2.47 org.springframework.cloud spring-cloud-dependencies 2020.0.1 pom import com.alibaba.cloud spring-cloud-alibaba-dependencies 2021.1 pom import
先了解一下curl方式操作es
与SpringBoot集成
配置类
import org.elasticsearch.client.RestHighLevelClient;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.data.elasticsearch.client.ClientConfiguration;import org.springframework.data.elasticsearch.client.RestClients;import org.springframework.data.elasticsearch.config.AbstractElasticsearchConfiguration;@Configurationpublic class ElasticsearchConfig extends AbstractElasticsearchConfiguration { @Override @Bean public RestHighLevelClient elasticsearchClient() { final ClientConfiguration clientConfiguration = ClientConfiguration.builder() .connectedTo("localhost:9200") .build(); return RestClients.create(clientConfiguration).rest(); }}实体类
import lombok.Data;import org.springframework.data.annotation.Id;import org.springframework.data.elasticsearch.annotations.Document;import org.springframework.data.elasticsearch.annotations.Field;import org.springframework.data.elasticsearch.annotations.FieldType;@Data@Document(indexName = "product", shards = 3, replicas = 1)public class Product { //必须有 id,这里的 id 是全局唯一的标识,等同于 es 中的"_id" @Id private Long id;//商品唯一标识 /** * type : 字段数据类型 * analyzer : 分词器类型 * index : 是否索引(默认:true) * Keyword : 短语,不进行分词 */ @Field(type = FieldType.Text, analyzer = "ik_max_word") private String title;//商品名称 @Field(type = FieldType.Keyword) private String category;//分类名称 @Field(type = FieldType.Double) private Double price;//商品价格 @Field(type = FieldType.Keyword, index = false) private String images;//图片地址}测试例子
@RestController@RequestMappingpublic class TestESController { @Autowired private ElasticsearchRestTemplate elasticsearchRestTemplate; @Resource ProductMapper productMapper; @GetMapping public void createIndex() { //创建索引,系统初始化会自动创建索引 System.out.println("创建索引"); } @DeleteMapping public void deleteIndex() { //创建索引,系统初始化会自动创建索引 boolean flg = elasticsearchRestTemplate.deleteIndex(Product.class); System.out.println("删除索引 = " + flg); } @PostMapping public void save(){ Product product = new Product(); product.setId(1L); product.setTitle("华为手机"); product.setCategory("手机"); product.setPrice(2999.0); product.setImages("http://www.atguigu/hw.jpg"); productMapper.save(product); } @PutMapping public void update(){ Product product = new Product(); product.setId(1L); product.setTitle("小米 2 手机"); product.setCategory("手机"); product.setPrice(9999.0); product.setImages("http://www.atguigu/xm.jpg"); productMapper.save(product); } @GetMapping("/findById") public void findById(){ Product product = productMapper.findById(1L).get(); System.out.println(product); } @GetMapping("/findAll") public void findAll(){ Iterable products = productMapper.findAll(); for (Product product : products) { System.out.println(product); } } //删除 @DeleteMapping("/delDocument") public void delete(){ Product product = new Product(); product.setId(1L); productMapper.delete(product); } //批量新增 @PostMapping("/addBatch") public void saveAll(){ List productList = new ArrayList<>(); for (int i = 0; i < 10; i++) { Product product = new Product(); product.setId(Long.valueOf(i)); product.setTitle("["+i+"]小米手机"); product.setCategory("手机"); product.setPrice(1999.0+i); product.setImages("http://www.atguigu/xm.jpg"); productList.add(product); } productMapper.saveAll(productList); } //分页查询 @GetMapping("/findByPageable") public void findByPageable(){ //设置排序(排序方式,正序还是倒序,排序的 id) Sort sort = Sort.by(Sort.Direction.DESC,"id"); int currentPage=0;//当前页,第一页从 0 开始, 1 表示第二页 int pageSize = 5;//每页显示多少条 //设置查询分页 PageRequest pageRequest = PageRequest.of(currentPage, pageSize,sort); //分页查询 Page productPage = productMapper.findAll(pageRequest); for (Product Product : productPage.getContent()) { System.out.println(Product); } }} RestHighLevelClient直接操作
这些操作,就是javaApi,和上图中,通过http方式和es交互式类似的
索引操作
/** * 这里时测试,开发时:通过 ESTemplate操作。Spring进行了封装 */@Slf4jpublic class ESIndexTestCase { public static void main(String[] args) throws IOException { // 创建客户端 RestHighLevelClient esClient = new RestHighLevelClient(RestClient.builder(new HttpHost("localhost", 9200))); // 创建索引 // CreateIndexRequest indexRequest = new CreateIndexRequest("book"); // CreateIndexResponse indexResponse = esClient.indices().create(indexRequest, RequestOptions.DEFAULT); // boolean acknowledged = indexResponse.isAcknowledged(); // log.error("响应{}",acknowledged); // 查询索引 // GetIndexRequest getIndexRequest = new GetIndexRequest("book"); // GetIndexResponse getIndexResponse = esClient.indices().get(getIndexRequest, RequestOptions.DEFAULT); // log.info("getAliases:{}",getIndexResponse.getAliases()); // log.info("getMappings:{}",getIndexResponse.getMappings()); // log.info("getSettings:{}",getIndexResponse.getSettings()); // 删除索引 AcknowledgedResponse deleteRes = esClient.indices().delete(new DeleteIndexRequest("book"), RequestOptions.DEFAULT); boolean delAck = deleteRes.isAcknowledged(); log.error("delAck:{}",delAck); esClient.close(); }}文档操作
@Slf4jpublic class ESDocmentTestCase { public static void main(String[] args) throws IOException { // 创建客户端 RestHighLevelClient esClient = new RestHighLevelClient(RestClient.builder(new HttpHost("localhost", 9200))); // 新增文档 // IndexRequest indexRequest = new IndexRequest("user"); // indexRequest.id("1001"); // // 准备文档 // User user = new User(); // user.setName("张三"); // user.setAge(22); // user.setSex("男"); // String userJson = JSONObject.toJSONString(user); // indexRequest.source(userJson, XContentType.JSON); // IndexResponse indexResponse = esClient.index(indexRequest, RequestOptions.DEFAULT); // log.error("getResult:==========>:{}",indexResponse.getResult()); // 批量新增文档 BulkRequest bulkRequest = new BulkRequest(); bulkRequest.add(new IndexRequest("user").id("2001").source(XContentType.JSON,"name","张三","age","40","sex","男")); bulkRequest.add(new IndexRequest("user").id("2002").source(XContentType.JSON,"name","222","age","10","sex","女")); bulkRequest.add(new IndexRequest("user").id("2003").source(XContentType.JSON,"name","33333","age","20","sex","男")); bulkRequest.add(new IndexRequest("user").id("2004").source(XContentType.JSON,"name","111","age","30","sex","男")); bulkRequest.add(new IndexRequest("user").id("2005").source(XContentType.JSON,"name","2222","age","31","sex","女")); BulkResponse bulkResponse = esClient.bulk(bulkRequest, RequestOptions.DEFAULT); log.error("getResult:==========>:{}",bulkResponse.getTook()); // 更新文档(全量更新,局部更新) // UpdateRequest updateRequest = new UpdateRequest("user", "1001"); // updateRequest.doc("sex","dddddd"); // UpdateResponse updateResponse = esClient.update(updateRequest, RequestOptions.DEFAULT); // log.error("getResult:==========>:{}",updateResponse.getResult()); // 根据_id查询文档 // GetRequest getRequest = new GetRequest("user", "1001"); // GetResponse getResponse = esClient.get(getRequest, RequestOptions.DEFAULT); // log.error("getResult:==========>:{}",getResponse.getSource()); // 根据_id 删除数据 // DeleteRequest deleteRequest = new DeleteRequest("user", "1001"); // DeleteResponse deleteResponse = esClient.delete(deleteRequest, RequestOptions.DEFAULT); // log.error("getResult:==========>:{}",deleteResponse.getResult()); // 批量删除(和批量新增类似) esClient.close(); }}检索操作
@Slf4jpublic class EsSearchTest { public static void main(String[] args) throws IOException { // 创建客户端 RestHighLevelClient esClient = new RestHighLevelClient(RestClient.builder(new HttpHost("localhost", 9200))); // 查询所有 // SearchRequest searchRequest = new SearchRequest("user"); // SearchSourceBuilder queryBuilder = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery()); // queryBuilder.from(0); // queryBuilder.size(4); // queryaBuilder.sort("age", SortOrder.DESC); // SearchRequest sourceRequest = searchRequest.source(queryBuilder); // SearchResponse searchResponse = esClient.search(sourceRequest, RequestOptions.DEFAULT); // log.error("getHits:======>{}", searchResponse.getHits().getTotalHits()); // searchResponse.getHits().forEach(hit -> System.out.println(hit.getSourceAsString())); // 2-组合查询 // SearchRequest searchRequest = new SearchRequest("user"); // BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery(); // // 这里就是组合条件。和mysql where 组合类似 // boolQueryBuilder.should(QueryBuilders.matchQuery("age","30")); // boolQueryBuilder.should(QueryBuilders.matchQuery("age","40")); // SearchSourceBuilder sourceBuilder = new SearchSourceBuilder().query(boolQueryBuilder); // searchRequest.source(sourceBuilder); // SearchResponse searchResponse = esClient.search(searchRequest, RequestOptions.DEFAULT); // searchResponse.getHits().forEach(hit -> System.err.println(hit.getSourceAsString())); // 3-范围查询 // SearchRequest searchRequest = new SearchRequest("user"); // SearchSourceBuilder sourceBuilder = new SearchSourceBuilder(); // RangeQueryBuilder rangeQuery = QueryBuilders.rangeQuery("age"); // rangeQuery.gte("30"); // sourceBuilder.query(rangeQuery); // searchRequest.source(sourceBuilder); // SearchResponse searchResponse = esClient.search(searchRequest, RequestOptions.DEFAULT); // searchResponse.getHits().forEach(hit -> System.out.println(hit.getSourceAsString())); //4-模糊查询+高亮 SearchRequest searchRequest = new SearchRequest("user"); SearchSourceBuilder sourceBuilder = new SearchSourceBuilder(); FuzzyQueryBuilder fuzzyQuery = QueryBuilders.fuzzyQuery("name", "张三"); sourceBuilder.query(fuzzyQuery); HighlightBuilder highlightBuilder = new HighlightBuilder(); highlightBuilder.preTags(""); highlightBuilder.postTags(""); highlightBuilder.field("name"); sourceBuilder.highlighter(highlightBuilder); searchRequest.source(sourceBuilder); SearchResponse searchResponse = esClient.search(searchRequest, RequestOptions.DEFAULT); searchResponse.getHits().forEach(System.out::println); // 5-聚合查询 esClient.close(); }}以上是"SpringBoot框架如何集成ElasticSearch"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!
索引
查询
手机
文档
框架
内容
商品
客户
客户端
方式
篇文章
张三
排序
更新
组合
名称
小米
就是
数据
标识
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
湖北九亚互联网络科技有限公司
互联网科技官网
科技互联网公司装修
互联网品科技
沃里互联网科技
广州紫鲸互联网科技
受益于互联网科技的高速发展
花神(南京)互联网科技有限公司
坤平互联网科技
互联网科技研发水平
阿里互联网科技企业
朱啸虎曾投资哪些互联网科技企业
小米互联网科技园入驻
广州有谷有贝互联网科技有限公司
东营紫格互联网科技
广东鹅鹅鹅互联网科技有限公司
信承诺互联网科技有限公司
科技互联网公司两年变化
科技互联网专业务虚会材料
互联网高科技绘画
中国互联网科技工作委员会毛军
智能科技公司是互联网公司吗
壕鑫互联网络科技
互联网科技博客
上海亿帐通互联网科技
中正互联网科技招聘
元气玛特互联网科技公司是外包吗
互联网公司属于科技吗
优雇互联网科技有限公司
伍佰万互联网科技是干嘛的