3.4_springboot2.x整合spring Data Elasticsearch

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/jatpen/article/details/102632633

Spring Data Elasticsearch 是spring data对elasticsearch进行的封装。

这里有两种方式操作elasticsearch:

1、使用ElasticsearchRepository,即可使用内部封装好的API,这种方式类似spring data jpa、的MongoDB

2、在项目中使用@Autowired注入ElasticsearchTemplate,然后完成相应操作。

1、使用ElasticsearchRepository方式

1)导入依赖

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

这里要注意版本问题:

SpringDataElasticSearch与ES版本之间有相应的适配关系,低版本的SpringDataElasticSearch不兼容高版本的ES。解决方案:

1.升级SpringBoot版本

2.降级ES版本。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-X36rbias-1571406558370)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1571402504012.png)]

2)application.yml

  #配置spring-boot-starter-data-elasticsearch
  data:
    elasticsearch:
      cluster-name: docker-cluster
      cluster-nodes: 192.x.x:9300

3)实体类

这里介绍Spring Data通过注解来声明字段的映射属性,有下面的三个注解:

@Document 作用在类,标记实体类为文档对象,一般有两个属性
indexName:对应索引库名称
type:对应在索引库中的类型
shards:分片数量,默认5
replicas:副本数量,默认1
@Id 作用在成员变量,标记一个字段作为id主键
@Field 作用在成员变量,标记为文档的字段,并指定字段映射属性:
type:字段类型,是枚举:FieldType,可以是text、long、short、date、integer、object等
text:存储数据时候,会自动分词,并生成索引
keyword:存储数据时候,不会分词建立索引
Numerical:数值类型,分两类
基本数据类型:long、interger、short、byte、double、float、half_float
浮点数的高精度类型:scaled_float
需要指定一个精度因子,比如10或100。elasticsearch会把真实值乘以这个因子后存储,取出时再还原。
Date:日期类型
elasticsearch可以对日期格式化为字符串存储,但是建议我们存储为毫秒值,存储为long,节省空间。
index:是否索引,布尔类型,默认是true
store:是否存储,布尔类型,默认是false
analyzer:分词器名称,这里的ik_max_word即使用ik分词器

@Document(indexName = "jiatp",type = "book")
public class Book {
    private Integer id;
    private String bookName;
    private String author;

    public Book() {
    }

    public Book(Integer id, String bookName, String author) {
        this.id = id;
        this.bookName = bookName;
        this.author = author;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getBookName() {
        return bookName;
    }

    public void setBookName(String bookName) {
        this.bookName = bookName;
    }

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }
}

4)自定义BookRespository接口

package com.jiatp.elasticsearch.respository;

import com.jiatp.elasticsearch.bean.Book;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
import org.springframework.stereotype.Component;

import java.util.List;
public interface BookRespository extends ElasticsearchRepository<Book,Integer> {

    public List<Book> findByBookNameLike(String bookName);
}

spring-data-elasticsearch支持方法内的关键字名称

https://docs.spring.io/spring-data/elasticsearch/docs/3.2.0.RELEASE/reference/html/#elasticsearch.query-methods

在这里插入图片描述

5)测试

@RunWith(SpringRunner.class)
@SpringBootTest
public class Springboot03ElasticsearchApplicationTests {
    //自动注入jest
    @Autowired
    BookRespository bookRespository;

    @Test
    public void TestRespository(){

//        Book book = new Book();
//        book.setId(1);
//        book.setBookName("西游记");
//        book.setAuthor("吴晨恩");
//        bookRespository.index(book);
//

        List<Book> lists = bookRespository.findByBookNameLike("游");
        for(Book bk :
            lists) {
            System.out.println(bk.getBookName());
        }
 

    }

2、使用ElasticsearchTemplate

配置如上

测试:

 @Autowired
    ElasticsearchTemplate elt;


    @Test
    public void testElasticsearchTemp() throws Exception{
        Client client = elt.getClient();
        XContentBuilder builder = jsonBuilder()
                .startObject()
                .field("user", "kimchy")
                .field("postDate", new Date())
                .field("message", "trying out Elasticsearch")
                .endObject();
        IndexResponse response = client.prepareIndex("people", "_doc", "1")
                .setSource(builder).get();

        System.out.println(response.getIndex());

在这里插入图片描述

其他测试请查看官方文档:

https://www.elastic.co/guide/en/elasticsearch/client/java-api/7.4/java-docs-index.html

猜你喜欢

转载自blog.csdn.net/jatpen/article/details/102632633