spring-data-elasticsearch使用

24 篇文章 0 订阅

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

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

2、使用spring data elasticsearch模块

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

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

Spring Data Release TrainSpring Data ElasticsearchElasticsearchSpring 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、加入依赖

    <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、加入配置:

spring:
  elasticsearch:
    rest:
      uris: http://172.21.46.26:9200
      read-timeout: 10s
      username: user
      password: xxxx

3、设计一个entity类

@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借口

@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扫描路径

@EnableElasticsearchRepositories(basePackages = {"jtl3d.smp.es.repository"})

 

插入demo:

    @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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值