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

ElasticSearch学习随笔之SpringBoot Starter 操作

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

ElasticSearch学习随笔之SpringBoot Starter 操作

ElasticSearch学习随笔之SpringBoot Starter 操作ElasticSearch,创始人 Shay Banon(谢巴农)
本文主讲 SpringBoot Starter 操作ES。


文章目录
  • 前言
  • 一、加入Springboot Starter依赖
  • 二、application.yml 配置 & 创建单元测试类
    • 2.1 application.yml 配置
    • 2.2 单元测试类
  • 三、单元测试前奏
    • 3.1 创建一个实体Bean(Tender.java)
    • 3.2 添加xxxxRepository 查询接口
  • 四 单元测试方法
    • 4.1 新增
    • 4.2 id获取
    • 4.3 产品名称搜索
    • 4.4 修改
    • 4.5 删除
    • 4.6 ElasticsearchRestTemplate 查询
  • 总结


前言

本文主要针对 SpringBoot Starter 如何操作 ES 记录简单案例。


一、加入Springboot Starter依赖

话不多说,直接copy,后面要用 Junit Test 测试,加入测试包



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


    org.springframework.boot
    spring-boot-starter-test

二、application.yml 配置 & 创建单元测试类 2.1 application.yml 配置
server:
  port: 8001
spring:
  application:
    name: xxxx-server #随便写个名字
  elasticsearch: #以下配置 主要用于 ElasticsearchRepository (两种操作方式,方式一配置)
    rest:
      uris: http://localhost:9200 #连接地址
  data:   #以下配置主要用于 ElasticsearchRestTemplate (两种操作方式,方式二配置)
    elasticsearch:
      repositories:
        enabled: true
      client:
        reactive:
          endpoints: localhost:9200
2.2 单元测试类
package com.wesh.es;

import com.wesh.home.HomeApplication;
import com.wesh.home.dao.es.TenderTestRepository;
import com.wesh.home.model.Tender;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
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.elasticsearch.core.ElasticsearchRestTemplate;
import org.springframework.data.elasticsearch.core.SearchHits;
import org.springframework.data.elasticsearch.core.mapping.IndexCoordinates;
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
import org.springframework.data.elasticsearch.core.query.Query;
import org.springframework.test.context.junit4.SpringRunner;

import javax.annotation.Resource;

@RunWith(SpringRunner.class)
@SpringBootTest(classes = HomeApplication.class)
public class ESTest {

}
三、单元测试前奏 3.1 创建一个实体Bean(Tender.java)
package com.wesh.home.model;

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;

@Document(indexName = "tender_test3")
public class Tender {

    @Id
    private String id;
    @Field(name = "product_agency", type = FieldType.Keyword)
    private String productAgency;
    @Field(name = "notice_type_id", type = FieldType.Keyword)
    private String noticeTypeId;
    @Field(name = "product_name", type = FieldType.Keyword)
    private String productName;
    @Field(name = "notice_type", type = FieldType.Keyword)
    private String noticeType;
	
	
3.2 添加xxxxRepository 查询接口

我们只需要定义接口即可进行相关的 ES 简单操作,不过要集成 Spring Data 提供的接口 ElasticsearchRepository。
Spring Data 提供的 接口中,按照 我们定义的方法名称 进行 ES 查询操作。具体规则可查阅 Spring官网总结方法命名规则

package com.wesh.home.dao.es;

import com.wesh.home.model.Tender;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface TenderTestRepository extends ElasticsearchRepository {

    
    Page findByProductName(String productName, PageRequest pageRequest);
}

为什么我们集成了ES提供的 repositoty 接口就可以操作es, 因为 spirng 定义了CRUD 接口。

四 单元测试方法 4.1 新增
@RunWith(SpringRunner.class)
@SpringBootTest(classes = HomeApplication.class)
public class ESTest {

    @Resource
    private TenderTestRepository tenderTestRepository;
    
    @Test
    public void save(){
        Tender tender = new Tender();
        tender.setNoticeType("招标广告");
        tender.setNoticeTypeId("12");
        tender.setProductName("血培养仪");
        tender.setProductAgency("山东方中工程管理有限公司");
        tenderTestRepository.save(tender);
    }
}
4.2 id获取
@RunWith(SpringRunner.class)
@SpringBootTest(classes = HomeApplication.class)
public class ESTest {

    @Resource
    private TenderTestRepository tenderTestRepository;

    @Test
    public void get(){
        Tender tender = tenderTestRepository.findById("kmfaxoABYWTnJb2BeotB").get();
        System.out.println(tender);
    }
}
4.3 产品名称搜索
@RunWith(SpringRunner.class)
@SpringBootTest(classes = HomeApplication.class)
public class ESTest {

    @Resource
    private TenderTestRepository tenderTestRepository;

	
    @Test
    public void findByProductName(){
        Page tenders = tenderTestRepository.findByProductName("血培养仪", PageRequest.of(0,10));
        tenders.forEach(tender -> System.out.println(tender));
    }
}
4.4 修改
@RunWith(SpringRunner.class)
@SpringBootTest(classes = HomeApplication.class)
public class ESTest {

    @Resource
    private TenderTestRepository tenderTestRepository;

    @Test
    public void update(){
        Tender tender = tenderTestRepository.findById("kmfaxoABYWTnJb2BeotB").get();
        tender.setProductAgency("微生物鉴定药敏鉴定器");
        tender.setProductName("鉴定药敏鉴定器");
        tenderTestRepository.save(tender);
    }
}
4.5 删除
@RunWith(SpringRunner.class)
@SpringBootTest(classes = HomeApplication.class)
public class ESTest {

    @Resource
    private TenderTestRepository tenderTestRepository;

    @Test
    public void delete(){
        Tender tender = tenderTestRepository.findById("kmfaxoABYWTnJb2BeotB").get();
        tenderTestRepository.delete(tender);
    }
}
4.6 ElasticsearchRestTemplate 查询
@RunWith(SpringRunner.class)
@SpringBootTest(classes = HomeApplication.class)
public class ESTest {

    @Autowired
    private ElasticsearchRestTemplate esRestTemplate;

    
    @Test
    public void findByQuery(){
        QueryBuilder queryBuilder = QueryBuilders.multiMatchQuery("山东方中工程管理有限公司", "product_agency");
        Query query = new NativeSearchQueryBuilder().withQuery(queryBuilder).build();
        SearchHits tenderSearchHits = esRestTemplate.search(query, Tender.class, IndexCoordinates.of("tender_test3"));
        tenderSearchHits.get().forEach(tenderSearchHit -> {
            Tender content = tenderSearchHit.getContent();
            System.out.println(content);
        });
    }
}
总结

以上是Spring Data 提供的接口对 ES 的增删改查的简单案例,方便公司里面临时有需要对ES操作大量数据是,可以直接copy 执行。
后期有时间持续更新。

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

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

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