SpringBoot檢索篇Ⅳ --- 整合ElasticSearch

知識儲備: html

關於ElasticSearch的基本使用我已經在上一篇文章介紹過了(傳送門),本篇文章主要講述的是SpringBoot與ElasticSearch的整合使用。node

SpringBoot與ElasticSearch的整合git

一.Jest的使用github

1.1 Jest默認不生效,須要導入Jest的工具包:spring

<dependency>
      <groupId>io.searchbox</groupId>
      <artifactId>jest</artifactId>
      <version>5.3.3</version>
 </dependency>

1.2 默認鏈接的主機地址是localhost,若不是部署在本地的話須要配置主機地址docker

spring.elasticsearch.jest.uris=http://172.**.**.**:9200

1.3 建立須要操做的實體類json

public class People {
    @JestId //注意要給id加上註解
    private Integer id;
    private String name;
    private Integer age;
    private String gender;

    public Integer getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    @Override
    public String toString() {
        return "People{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", gender='" + gender + '\'' +
                '}';
    }
}

1.4  測試:給ES中的索引保存一個文檔elasticsearch

   @Autowired
    JestClient jestClient; //SpringBoot已經給咱們自動配置好了,能夠直接引用
    @Test
    public void contextLoads() {
        //1,給ES中的索引保存一個文檔
        People people = new People();
        people.setId(1);
        people.setAge(22);
        people.setGender("男");
        people.setName("王鑫");

        //構建一個索引功能
        Index index = new Index.Builder(people).index("school").type("qinghua").build();
        try {
            jestClient.execute(index);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

1.5 測試:構建搜索功能ide

 @Test
    public void search(){
        //查詢表達式
        String json = "{\n" +
                "    \"query\" : {\n" +
                "        \"match\" : {\n" +
                "            \"name\" : \"王\"\n" +
                "        }\n" +
                "    }\n" +
                "}";
        //構建搜索功能
        Search search = new Search.Builder(json).addIndex("school").addType("qinghua").build();
        try {
            SearchResult result = jestClient.execute(search);
            System.out.println(result.getJsonString());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

這裏只是給出幾個簡單的演示,更多的能夠詳細參考Jest的官方文檔工具

 

二.SpringData ElasticSearch的使用

在使用SpringData ElasticSearch前有個問題須要關注一下,就是版本問題,我一開始用的是ES的最新版,SpringBoot2.x的版本,可是一直報錯。因此通過幾番測試我仍是將SpringBoot版本將爲1.5.6版本,並用docker從新安裝了2.4.6版本的ES。

2.1 配置節點名稱,端口

SpringData ElasticSearch採用的是TCP通訊,用的是9300端口。

spring.data.elasticsearch.cluster-name=elasticsearch
spring.data.elasticsearch.cluster-nodes=***.**.**.**:9300
spring.data.elasticsearch.repositories.enabled=true

2.2 建立實體類,配置索引信息

package com.wang.elasticsearch.bean;

import org.springframework.data.elasticsearch.annotations.Document;

@Document(indexName = "xinhua",type = "book") //這邊要配置索引信息
public class Book {
    private Integer id;
    private String bookname;
    private String author;

    @Override
    public String toString() {
        return "Book{" +
                "id=" + id +
                ", bookname='" + bookname + '\'' +
                ", 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;
    }
}

2.3 編寫一個ElasticsearchRepository

/**
 * 泛型的類型爲<實體類,索引主鍵類型>
 */
public interface BookRepository extends ElasticsearchRepository<Book,Integer> {
   
}

2.4 建立一個索引

  @Test
    public void Booksave(){
        Book book = new Book();
        book.setId(1);
        book.setBookname("Java開發");
        book.setAuthor("Wang");
        bookRepository.index(book);
    }

2.5 自定義ElasticsearchRepository方法

ElasticsearchRepository提供有不少自帶的方法,可以知足不少開發需求,固然也能夠擴展本身的方法,擴展方法只須要給個方法名就能夠了,不過要注意方法名稱要符合規範。

/**
 * 泛型的類型爲<實體類,索引類型>
 */
public interface BookRepository extends ElasticsearchRepository<Book,Integer> {
    /**
     * 這邊的方法名要注意和屬性名對應,Book的屬性名爲bookname,對應的方法名中的屬性爲Bookname而不是BookName
     * @param bookname
     * @return
     */
    public List<Book> findByBooknameLike(String bookname);
}
@Test
    public void Bookfind(){
    
        for (Book book: bookRepository.findByBooknameLike("開")){
            System.out.println(book);
        }

    }
相關文章
相關標籤/搜索