zoukankan      html  css  js  c++  java
  • spring-整合es

    spring-整合es

    导入pom

     <?xml version="1.0" encoding="UTF-8"?>
     <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <groupId>com.player3</groupId>
        <artifactId>es_spring</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <name>es_spring</name>
        <description>Demo project for Spring Boot</description>
     
        <properties>
            <java.version>1.8</java.version>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
            <spring-boot.version>2.3.7.RELEASE</spring-boot.version>
        </properties>
     
        <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-starter</artifactId>
            </dependency>
     
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
                <exclusions>
                    <exclusion>
                        <groupId>org.junit.vintage</groupId>
                        <artifactId>junit-vintage-engine</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <scope>test</scope>
            </dependency>
        </dependencies>
     
        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-dependencies</artifactId>
                    <version>${spring-boot.version}</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
            </dependencies>
        </dependencyManagement>
     
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.8.1</version>
                    <configuration>
                        <source>1.8</source>
                        <target>1.8</target>
                        <encoding>UTF-8</encoding>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <version>2.3.7.RELEASE</version>
                    <configuration>
                        <mainClass>com.player3.es_spring.EsSpringApplication</mainClass>
                    </configuration>
                    <executions>
                        <execution>
                            <id>repackage</id>
                            <goals>
                                <goal>repackage</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
     
     </project>
     

    application.properties

     # 应用名称
     spring.application.name=es_spring
     
     # es 服务地址
     elasticsearch.host=127.0.0.1
     # es 服务端口
     elasticsearch.port=9200
     # 配置日志级别,开启 debug 日志
     logging.level.com.atguigu.es=debug

    ElasticsearchConfig

     package com.player3.es_spring.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;
     @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 client = new RestHighLevelClient(builder);
            return client;
        }
     }

    Product实体类

     package com.player3.es_spring.pojo;
     
     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;
     
     @Data
     @NoArgsConstructor
     @AllArgsConstructor
     @ToString
     @Document(indexName = "shopping", 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;//图片地址
     }

    es连接dao

     package com.player3.es_spring.dao;
     
     import com.player3.es_spring.pojo.Product;
     import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
     import org.springframework.stereotype.Repository;
     
     @Repository//ElasticsearchRepository
     public interface ProductDao extends ElasticsearchRepository<Product,Long> {
     }
     

    EsSpringApplicationTests

     package com.player3.es_spring;
     
     import com.player3.es_spring.dao.ProductDao;
     import com.player3.es_spring.pojo.Product;
     import org.junit.Test;
     import org.junit.runner.RunWith;
     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.Sort;
     import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;
     import org.springframework.test.context.junit4.SpringRunner;
     
     import java.util.ArrayList;
     import java.util.List;
     
     @RunWith(SpringRunner.class)
     @SpringBootTest
     public class EsSpringApplicationTests {
        //注入 ElasticsearchRestTemplate
        @Autowired
        private ElasticsearchRestTemplate elasticsearchRestTemplate;
     
        @Autowired
        private ProductDao productDao;
        //创建索引并增加映射配置
        @Test
        public void createIndex(){
            //创建索引,系统初始化会自动创建索引
            System.out.println("创建索引");
        }
        @Test
        public void deleteIndex(){
            //创建索引,系统初始化会自动创建索引
            boolean flg = elasticsearchRestTemplate.deleteIndex(Product.class);
            System.out.println("删除索引 = " + flg);
        }
     
        @Test
        public void save(){
            Product product = new Product();
            product.setId(2L);
            product.setTitle("华为手机");
            product.setCategory("手机");
            product.setPrice(2999.9);
            product.setImages("http://www.baidu.com/jpg");
            productDao.save(product);
     
        }
        //修改 全量更新 覆盖
        @Test
        public void update(){
            Product product = new Product();
            product.setId(2L);
            product.setTitle("小米 2 手机");
     //       product.setCategory("手机");
     //       product.setPrice(9999.0);
            product.setImages("http://www.atguigu/xm.jpg");
            productDao.save(product);
        }
        @Test
        public void findById(){
            Product product = productDao.findById(2L).get();
            System.out.println(product);
        }
        @Test
        public void findAll(){
            Iterable<Product> products = productDao.findAll();
            for (Product product : products) {
                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.setCategory("手机");
                product.setPrice(1999.0+i);
                product.setImages("http://www.atguigu/xm.jpg");
                productList.add(product);
            }
            productDao.saveAll(productList);
        }
        //分页查询
        @Test
        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 = productDao.findAll(pageRequest);
            for (Product Product : productPage.getContent()) {
                System.out.println(Product);
            }
        }
     }
     

    SpringDataESSearchTest

     package com.player3.es_spring;
     
     import com.player3.es_spring.dao.ProductDao;
     import com.player3.es_spring.pojo.Product;
     import org.elasticsearch.index.query.QueryBuilders;
     import org.elasticsearch.index.query.TermQueryBuilder;
     import org.junit.Test;
     import org.junit.runner.RunWith;
     import org.springframework.beans.factory.annotation.Autowired;
     import org.springframework.boot.test.context.SpringBootTest;
     import org.springframework.data.domain.PageRequest;
     import org.springframework.test.context.junit4.SpringRunner;
     
     @RunWith(SpringRunner.class)
     @SpringBootTest
     public class SpringDataESSearchTest {
        @Autowired
        private ProductDao productDao;
     
        /**
          * term 查询
          * search(termQueryBuilder) 调用搜索方法,参数查询构建器对象
          */
        @Test
        public void termQuery(){
            TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("title", " 小米");
                    Iterable<Product> products = productDao.search(termQueryBuilder);
            for (Product product : products) {
                System.out.println(product);
            }
        }
     
     
     
        /**
          * term 查询加分页
          */
        @Test
        public void termQueryByPage(){
            int currentPage= 0 ;
            int pageSize = 5;
            //设置查询分页
            PageRequest pageRequest = PageRequest.of(currentPage, pageSize);
            TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("title", " 小米");
                    Iterable<Product> products =
                            productDao.search(termQueryBuilder,pageRequest);
            for (Product product : products) {
                System.out.println(product);
            }
        }
     }
     

     

  • 相关阅读:
    散列点斜率算法解剖
    c# 3d图像显示
    .net core 运行不需命令行
    c# 异步调用(异步模式,基于事件)
    分配在堆上还是分配在栈上及其区别
    c# 自定义按钮,渐变颜色(含中心向四周渐变,单方向渐变)
    玩转Web值jquery(一)---对表单中的某一标签批量处理(以input为例)
    设计模式 模版方法模式 展现程序员的一天
    【Android进阶】Android面试题目整理与讲解(二)
    【Android进阶】让程序运行效率更高的编程技巧总结
  • 原文地址:https://www.cnblogs.com/q1359720840/p/14716470.html
Copyright © 2011-2022 走看看