• springboot整合elasticsearch


    1.安装依赖

    创建springboot工程,引入如下依赖

    <dependencies>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-devtools</artifactId>
                <scope>runtime</scope>
                <optional>true</optional>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-test</artifactId>
            </dependency>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-test</artifactId>
            </dependency>
        </dependencies>

    在application.properties进行配置

    # es 服务地址
    elasticsearch.host=127.0.0.1
    # es 服务端口
    elasticsearch.port=9200
    # 配置日志级别,开启 debug 日志
    logging.level.com.gh.springbootes=debug

    2.编写配置类

    package com.gh.springbootes.config;
    
    import lombok.Data;
    import org.apache.http.HttpHost;
    import org.elasticsearch.client.RestClient;
    import org.elasticsearch.client.RestClientBuilder;
    import org.elasticsearch.client.RestHighLevelClient;
    import org.springframework.boot.context.properties.ConfigurationProperties;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.data.elasticsearch.config.AbstractElasticsearchConfiguration;
    
    /**
     * @Author Eric
     * @Date 2021/7/27 10:40
     * @Version 1.0
     */
    @ConfigurationProperties(prefix = "elasticsearch")
    @Configuration
    @Data
    public class ElasticsearchConfig extends AbstractElasticsearchConfiguration {
        private String host;
        private Integer port;
        @Override
        public RestHighLevelClient elasticsearchClient() {
            RestClientBuilder builder = RestClient.builder(new HttpHost(host, port));
            RestHighLevelClient restHighLevelClient = new
                    RestHighLevelClient(builder);
            return restHighLevelClient;
        }
    }

    3.编写实体类

    编写实体类Product,设置哪些查询规则

    package com.gh.springbootes;
    
    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    import lombok.ToString;
    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;
    
    /**
     * @Author Eric
     * @Date 2021/7/27 10:37
     * @Version 1.0
     */
    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    @ToString
    @Document(indexName = "product",shards = 3,replicas = 1)//shards主分片replicas副本
    public class Product {
        @Id
        private Long id;//商品唯一标识
        @Field(type = FieldType.Text)
        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;//图片地址
    }

    4.编写Dao层

    编写ProductDao继承ElasticsearchRepository,第一个参数代表实体类,第二个代表主键

    package com.gh.springbootes.dao;
    
    import com.gh.springbootes.Product;
    import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
    
    public interface ProductDao extends ElasticsearchRepository<Product,Long> {
    }

    5.操作elasticsearch

    5.1 索引操作

    package com.gh.springbootes;
    
    import org.junit.jupiter.api.Test;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.context.SpringBootTest;
    import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;
    
    @SpringBootTest
    class SpringbootEsApplicationTests {
    
        @Autowired
        private ElasticsearchRestTemplate elasticsearchRestTemplate;
    
        @Test
        public void createIndex(){
            //创建索引,系统初始化会自动创建索引
            System.out.println("创建索引成功");
        }
    
        @Test
        public void deleteIndex(){
            //删除索引
            elasticsearchRestTemplate.deleteIndex(Product.class);
            System.out.println("删除索引成功");
        }
    
    }

    5.2 文档操作

    package com.gh.springbootes;
    
    import com.gh.springbootes.dao.ProductDao;
    import org.junit.jupiter.api.Test;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.context.SpringBootTest;
    import org.springframework.data.domain.Page;
    import org.springframework.data.domain.PageRequest;
    import org.springframework.data.domain.Pageable;
    import org.springframework.data.domain.Sort;
    import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;
    
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * @Author Eric
     * @Date 2021/7/27 11:12
     * @Version 1.0
     */
    @SpringBootTest
    public class SpringDataEsProductDaoTest {
        
        @Autowired
        private ProductDao productDao;
    
        /**
         * 新增
         */
        @Test
        public void save() {
            Product product = new Product();
            product.setId(3L);
            product.setTitle("华为手机");
            product.setCategory("手机");
            product.setPrice(2999.00);
            product.setImages("http://www.gh.com");
            productDao.save(product);
        }
    
        /**
         * 修改
         */
        @Test
        public void update() {
            Product product = new Product();
            product.setId(2L);
            product.setTitle("小米手机");
            product.setCategory("手机");
            product.setPrice(2997.00);
            product.setImages("http:www.gh.com");
            productDao.save(product);
        }
    
        /**
         * 根据id查询
         */
        @Test
        public void findById() {
            Product product = productDao.findById(2L).get();
            System.out.println(product);
        }
    
        /**
         * 查询所有
         */
        @Test
        public void findAll() {
            productDao.findAll().forEach(product -> {
                System.out.println(product);
            });
        }
    
        /**
         * 删除
         */
        @Test
        public void delete() {
            Product product = new Product();
            product.setId(2L);
            productDao.delete(product);
        }
    
        /**
         * 批量新增
         */
        @Test
        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.setPrice(1999.00 + i);
                product.setImages("http://www.gh.com");
                product.setCategory("手机");
                productList.add(product);
            }
            productDao.saveAll(productList);
        }
    
        /**
         * 分页查询
         */
        @Test
        public void findByPage() {
            //设置排序规则
            Sort sort=Sort.by(Sort.Direction.DESC,"id");
            int currentPage=0;//当前页
            int pageSize=5;//每页显示的数据
            PageRequest pageRequest=PageRequest.of(currentPage,pageSize,sort);
            Page<Product> productPage = productDao.findAll(pageRequest);
            for (Product product : productPage) {
                System.out.println(product);
            }
        }
    
    }

    5.3 文档查询

    package com.gh.springbootes;
    
    import com.gh.springbootes.dao.ProductDao;
    import org.elasticsearch.index.query.QueryBuilders;
    import org.elasticsearch.index.query.TermQueryBuilder;
    import org.junit.jupiter.api.Test;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.context.SpringBootTest;
    import org.springframework.data.domain.PageRequest;
    
    /**
     * @Author Eric
     * @Date 2021/7/27 12:08
     * @Version 1.0
     */
    @SpringBootTest
    public class SpringDataEsSearchTest {
    
        @Autowired
        private ProductDao productDao;
    
        /**
         * term查询
         */
        @Test
        public void termQuery() {
            TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("category", "手机");
            productDao.search(termQueryBuilder).forEach(product -> {
                System.out.println(product);
            });
        }
    
        /**
         * term分页查询
         */
        @Test
        public void termPageQuery() {
            int page = 0;
            int limit = 5;
            PageRequest pageRequest = PageRequest.of(page, limit);
            TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("category", "手机");
            productDao.search(termQueryBuilder, pageRequest).forEach(product -> {
                System.out.println(product);
            });
        }
    }

    一点点学习,一丝丝进步。不懈怠,才不会被时代所淘汰!

  • 相关阅读:
    nginx启动,停止,重启
    获取节点与属性
    修改节点的属性 节点默认不允许修改
    删除节点与属性
    创建属性Attribute
    新增节点NewBook并增加属性Name="WPF"
    创建xml树
    HashTable Queue Stack SortedList BitArray
    ArrayList详细
    sqlserver 优化
  • 原文地址:https://www.cnblogs.com/fqh2020/p/15066029.html
Copyright © 2020-2023  润新知