iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >SpringBoot框架如何集成ElasticSearch
  • 227
分享到

SpringBoot框架如何集成ElasticSearch

2023-06-25 12:06:51 227人浏览 八月长安
摘要

这篇文章主要为大家展示了“SpringBoot框架如何集成elasticsearch”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“springBoot框架如何集成ElasticSearch”这篇

这篇文章主要为大家展示了“SpringBoot框架如何集成elasticsearch”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“springBoot框架如何集成ElasticSearch”这篇文章吧。

依赖

SpringBoot版本:2.4.2

 <dependencies>        <!--lombok-->        <dependency>            <groupId>org.projectlombok</groupId>            <artifactId>lombok</artifactId>            <optional>true</optional>        </dependency>  <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-data-elasticsearch</artifactId>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-WEB</artifactId>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-devtools</artifactId>            <optional>true</optional>            <scope>true</scope>        </dependency>        <dependency>            <groupId>com.alibaba</groupId>            <artifactId>fastJSON</artifactId>            <version>1.2.47</version>        </dependency>    </dependencies>    <dependencyManagement>        <dependencies>            <dependency>                <groupId>org.springframework.cloud</groupId>                <artifactId>spring-cloud-dependencies</artifactId>                <version>2020.0.1</version>                <type>pom</type>                <scope>import</scope>            </dependency>            <dependency>                <groupId>com.alibaba.cloud</groupId>                <artifactId>spring-cloud-alibaba-dependencies</artifactId>                <version>2021.1</version>                <type>pom</type>                <scope>import</scope>            </dependency>        </dependencies>    </dependencyManagement>

先了解一下curl方式操作es

SpringBoot框架如何集成ElasticSearch

与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;//商品唯一标识        @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<Product> 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<Product> 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<Product> productPage = productMapper.findAll(pageRequest);        for (Product Product : productPage.getContent()) {            System.out.println(Product);        }    }}

RestHighLevelClient直接操作

这些操作,就是javaapi,和上图中,通过http方式和es交互式类似的

索引操作

@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("<font color='red'>");        highlightBuilder.postTags("</font>");        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”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网精选频道!

--结束END--

本文标题: SpringBoot框架如何集成ElasticSearch

本文链接: https://www.lsjlt.com/news/304601.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • SpringBoot框架如何集成ElasticSearch
    这篇文章主要为大家展示了“SpringBoot框架如何集成ElasticSearch”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“SpringBoot框架如何集成ElasticSearch”这篇...
    99+
    2023-06-25
  • Springboot如何集成Elasticsearch
    小编给大家分享一下Springboot如何集成Elasticsearch,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!集成配置步骤步骤1:加入 Maven 相关依...
    99+
    2023-06-22
  • springboot中如何集成elasticsearch
    这篇文章主要介绍“springboot中如何集成elasticsearch”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“springboot中如何集成elasticsearch”文章能帮助大家解决问...
    99+
    2023-06-08
  • Springboot中如何集成Swagger2框架
    这篇文章给大家分享的是有关Springboot中如何集成Swagger2框架的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。摘要:在项目开发中,往往期望做到前后端分离,也就是后端开发人员往往需要输出大量的服务接口,...
    99+
    2023-05-30
    spring boot swagger2
  • SpringBoot集成 ElasticSearch
    Spring Boot 集成 ElasticSearch 对于ElasticSearch比较陌生的小伙伴可以先看看ElasticSearch的概述ElasticSearch安装、启动、操作及概念简介 好的开始啦~ 1、基础操作 1.1、导入...
    99+
    2023-08-18
    elasticsearch spring boot java maven intellij-idea
  • SpringBoot框架集成ElasticSearch实现过程示例详解
    目录依赖与SpringBoot集成配置类实体类测试例子RestHighLevelClient直接操作索引操作文档操作检索操作依赖 SpringBoot版本:2.4.2 <...
    99+
    2024-04-02
  • .NET如何集成ORM框架HiSql
    这篇文章主要讲解了“.NET如何集成ORM框架HiSql”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“.NET如何集成ORM框架HiSql”吧!一、引言做.Net这么多年,出现了很多很多OR...
    99+
    2023-07-02
  • SpringBoot集成ElasticSearch的示例代码
    目录一、Elasticseach介绍1.简单介绍2.对比关系:3.详细说明:4.查出数据的解释 二、SpringBoot集成Elasticseach1.引入依赖2.添加配置...
    99+
    2024-04-02
  • SpringBoot - 集成Quartz框架之常用配置
    Quartz是一款Java编写的开源任务调度框架,同时它也是Spring默认的任务调度框架。它的作用其实类似于Java中的Timer定时器以及JUC中的ScheduledExecutorService...
    99+
    2023-09-08
    spring boot java spring
  • Spring 4+ElasticSearch如何集成
    小编给大家分享一下Spring 4+ElasticSearch如何集成,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一: ElasticSearch 基本概念IN...
    99+
    2023-06-04
  • SpringBoot集成ElasticSearch的代码是什么
    这篇“SpringBoot集成ElasticSearch的代码是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Sprin...
    99+
    2023-06-29
  • SpringBoot集成elasticsearch使用图文详解
    目录前言elasticsearch简介elasticsearch使用环境安装代码演示普通查询高亮查询结束前言 此文适合了解了es相关概念以及基础知识的同学阅读 elasticsear...
    99+
    2023-05-16
    springboot集成elasticsearch springboot集成elasticsearch样例项目 springboot集成Elasticsearch
  • TP框架如何集成短信服务
    这篇文章主要介绍了TP框架如何集成短信服务的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇TP框架如何集成短信服务文章都会有所收获,下面我们一起来看看吧。安装教程使用 composer require ...
    99+
    2023-07-04
  • springboot如何集成shiro
    这篇文章主要介绍了springboot如何集成shiro,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、项目整体介绍:项目整体的结构如下图所示,项目整体采用 springb...
    99+
    2023-06-15
  • springboot如何集成websocket
    这篇文章主要介绍了springboot如何集成websocket,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1. 原生注解pom.xml<dependency>...
    99+
    2023-06-22
  • SpringBoot如何集成Swagger3
    这篇文章主要介绍SpringBoot如何集成Swagger3,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一,什么是swagger1,  Swagger 是一个规范和完整的文档框架,   ...
    99+
    2023-06-22
  • .NET集成ORM框架HiSql
    一、引言 做.Net这么多年,出现了很多很多ORM框架,比如Dapper,Sqlsugar,Freesql等等。在之前的项目中,用到的ORM框架也大多数是这几个老牌的框架。不过最近园...
    99+
    2024-04-02
  • SpringBoot如何集成RabbitMQ
    这篇文章主要介绍“SpringBoot如何集成RabbitMQ”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“SpringBoot如何集成RabbitMQ”文章能帮助大家解决问题。一、RabbitMQ...
    99+
    2023-06-30
  • SpringBoot如何集成MaxCompute
    这篇文章主要介绍“SpringBoot如何集成MaxCompute”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“SpringBoot如何集成MaxCompute”文章能帮助大家解决问题。1、SDK方...
    99+
    2023-07-06
  • SpringBoot如何集成swagger
    小编给大家分享一下SpringBoot如何集成swagger,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!Swagger 是一款RESTFUL接口的文档在线自动生成+功能测试功能软件。本文简单介绍了在项目中集成swagge...
    99+
    2023-05-30
    spring boot swagger
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作