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);
        }

    }
相关文章
相关标签/搜索