spring-data-elasticsearch使用

2022-03-28 20:23:56 浏览数 (1)

spring框架操作elasticsearch可以有很方法,

1、使用原始的客户端比如RestHighLevelClient(es官方提供并推荐的)、Jest等

2、使用spring data elasticsearch模块

本文讲述的是spring data elasticsearch的应用,应该这种使用方式对于使用过jpa的开发人员来说,入门门槛很低,简单的搜索查询完全可以胜任。

本文使用的是springboot 2.2.x,为什么呢,这是考虑到兼容性问题:

Spring Data Release Train

Spring Data Elasticsearch

Elasticsearch

Spring Boot

Moore

3.2.x

6.8.4

2.2.x

Lovelace

3.1.x

6.2.2

2.1.x

Kay[1]

3.0.x[1]

5.5.0

2.0.x[1]

Ingalls[1]

2.1.x[1]

2.4.0

1.5.x[1]

如上表所示,elasticsearch6.2以上版本推荐使用的springboot版本为2.2以上,这个版本针对elasticsearch来说一定比较大的改观就是与elasticsearch的通信增加了RestHighLevelClient的支持,Spring Data Elasticsearch 3.2.x以前的版本通信采用的是netty(9300端口),RestHighLevelClient通信是用的9200端口,所以这个在配置时要特别注意。

spring-data-elasticsearch具体使用如下所示:

1、加入依赖

代码语言:javascript复制
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Hoxton.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>


    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
        </dependency>
    </dependencies>       

2、加入配置:

代码语言:javascript复制
spring:
  elasticsearch:
    rest:
      uris: http://172.21.46.26:9200
      read-timeout: 10s
      username: user
      password: xxxx

3、设计一个entity类

代码语言:javascript复制
@Getter
@Setter
@Document(indexName="smp-product",type="es-product")
public class ESProduct {

    @Field
    String id;

    @Field
    String mainTitle;

    @Field
    String subTitle;

    @Field
    private ESSupplier supplier;
}

4、设计一个repository借口

代码语言:javascript复制
@Repository
public interface ESProductRepository extends ElasticsearchRepository<ESProduct,String> {
    List<ESProduct> findByMainTitle(String mainTitle);
    List<ESProduct> findByMainTitleLike(String mainTitle);
    List<ESProduct> findByIdLike(String id);
    List<ESProduct> findBySupplierAddress(String addr);
    List<ESProduct> findBySupplierAddressLike(String addr);
}

5、配置elasticsearch repository扫描路径

代码语言:javascript复制
@EnableElasticsearchRepositories(basePackages = {"jtl3d.smp.es.repository"})

插入demo:

代码语言:javascript复制
    @Test
    public void test(){
        List<Product> prods = productRepository.findAll();
        for(Product prod:prods){
            ESProduct p = new ESProduct();
            p.setId(prod.getId());
            p.setMainTitle(prod.getMainTitle());
            p.setSubTitle(prod.getSubTitle());
            //获取供应商信息
            Optional<Supplier> opt = supplierRepository.findById(prod.getSupplierId());
            if(opt.isPresent()){
                ESSupplier sup = new ESSupplier();
                sup.setCompanyName(opt.get().getCompanyName());
                sup.setAddress(opt.get().getAddress());
                p.setSupplier(sup);
            }
            esproductRepository.save(p);
        }
    }

好了,一个简单的spring-data-elasticsearch使用已经完成,更多可以参考spring官网文档:

https://docs.spring.io/spring-data/elasticsearch/docs/3.2.5.RELEASE/reference/html/#reference

0 人点赞