3.4_springboot2.x整合spring Data Elasticsearch


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM