栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 云计算 > 云平台

springboot 接入elasticsearch

云平台 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

springboot 接入elasticsearch

准备环境:参考 https://blog.csdn.net/weixin_44141284/article/details/121553749

修改ES解压目录/config/elasticsearch.yml文件,防止cors,末尾需要添加

http.cors.enabled: true
http.cors.allow-origin: "*"

1. springboot pom.xml

    
        org.springframework.boot
        spring-boot-starter-parent
        2.2.2.RELEASE
        
    

        
            org.springframework.boot
            spring-boot-starter-web
        
        
            org.projectlombok
            lombok
            true
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        
        
            junit
            junit
        

        
        
            com.alibaba
            fastjson
            1.2.60
        
        
            com.google.guava
            guava
            21.0
        
        
            org.apache.commons
            commons-lang3
            3.9
        
        

        
            org.springframework.boot
            spring-boot-starter-data-elasticsearch
            2.3.12.RELEASE
        

2. application.yml配置

server:
  port: 9090

spring:
  data:
    elasticsearch:
      client:
        reactive:
          endpoints: localhost:9200

3. elasticsearch 配置类

import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.beans.factory.annotation.Value;
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;


@Configuration
public class ElasticSearchRestClientConfig extends AbstractElasticsearchConfiguration {
    
    @Value("${spring.data.elasticsearch.client.reactive.endpoints}")
    private String clusterNodes;
    
    @Override
    @Bean
    public RestHighLevelClient elasticsearchClient() {
        final ClientConfiguration clientConfiguration = ClientConfiguration.builder()
                .connectedTo(clusterNodes)
                .build();
        return RestClients.create(clientConfiguration).rest();
    }

}

4.实体类

package com.space.es.entity;

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;

import java.io.Serializable;
import java.math.BigDecimal;


@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
@Document(indexName = "product", shards = 3, replicas = 0)
public class ProductEntity implements Serializable {

    

    @Id
    private Long id;

    @Field(type = FieldType.Keyword)
    private String code;

    @Field(type = FieldType.Text, analyzer = "simple")
    private String pdName;

    @Field(type = FieldType.Keyword)
    private String category;

    @Field(type = FieldType.Double)
    private BigDecimal price;

    // @Field(type = FieldType.Text, analyzer = "ik_max_word")
    @Field(type = FieldType.Text, index = false)
    private String descrip;

}

5.dao接口

import com.es.entity.ProductEntity;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
import org.springframework.stereotype.Repository;


@Repository
public interface ProductRepository extends ElasticsearchRepository {
}

6.测试类

package com.space.es.main;

import com.google.common.collect.Lists;
import com.es.entity.ProductEntity;
import com.es.repository.ProductRepository;
import org.elasticsearch.client.RestHighLevelClient;
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.data.domain.Sort;
import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;
import org.springframework.test.context.junit4.SpringRunner;

import java.math.BigDecimal;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;


@SpringBootTest
@RunWith(SpringRunner.class)
public class IndexAndDocTest {

    @Autowired
    private ProductRepository productRepository;


    @Test
    public void createIndex(){
        System.out.println("项目启动时自动创建索引:index-----");
    }

    @Test
    public void delIndex(){
        boolean b = template.deleteIndex(ProductEntity.class);
        System.out.println("del index: " + b);
    }

    @Test
    public void save(){
        ProductEntity entity = new ProductEntity();
        entity.setId(1001L);
        entity.setCode("Fruits");
        entity.setCategory("水果");
        entity.setPdName("香蕉");
        entity.setPrice(new BigDecimal("3.5"));
        entity.setAddressUrl("url");
        productRepository.save(entity);
    }

    @Test
    public void update(){
        ProductEntity entity = new ProductEntity();
        entity.setId(1002L);
        entity.setCode("Fruits");
        entity.setCategory("水果");
        entity.setPdName("苹果");
        entity.setPrice(new BigDecimal("6.5"));
        entity.setAddressUrl("url");
        productRepository.save(entity);
    }

    @Test
    public void getByIdAndUpdate(){
        Optional byId = productRepository.findById(1001L);
        if (byId.isPresent()) {
            System.out.println(byId.get());
            ProductEntity entity = byId.get();
            entity.setPrice(new BigDecimal("9.9"));
            productRepository.save(entity);
        }
    }

    @Test
    public void findAll(){
        Iterable all = productRepository.findAll();
        for (ProductEntity entity : all) {
            System.out.println(entity);
        }
    }

    @Test
    public void deleteDoc(){
        Optional byId = productRepository.findById(1001L);
        if (byId.isPresent()) {
            System.out.println(byId.get());
            productRepository.delete(byId.get());
        }
    }

    @Test
    public void saveAll(){
        int count = 10;
        for (int i = 0; i < count; i++) {
            ProductEntity entity = new ProductEntity();
            entity.setId((10L+i));

            entity.setCategory("水果");
            entity.setCode("Fruits");
            entity.setPdName("山竹"+i);
            entity.setPrice(new BigDecimal(i+1));

            productRepository.save(entity);
        }
    }

    @Test
    public void findByPage(){
        Sort sort = Sort.by(Sort.Direction.DESC, "id");
        int from = 0;
        int size = 5;
        PageRequest pageRequest = PageRequest.of(from, size, sort);
        Iterable all = productRepository.findAll(pageRequest);
        for (ProductEntity entity : all) {
            System.out.println(entity);
        }
    }

    @Test
    public void searchQuery(){
        TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("category", "Fruits");
        Iterable search = productRepository.search(termQueryBuilder);
        for (ProductEntity entity : search) {
            System.out.println(entity);
        }
    }


}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/895665.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号