SpringBoot+ElasticSearch整合

1、在使用SpringBoot整合Elasticsearch 之前,了解下它们之间的版本对应关系:

Spring Boot Version (x) Spring Data Elasticsearch Version (y) Elasticsearch Version (z)
x <= 1.3.5 y <= 1.3.4 z <= 1.7.2*
x >= 1.4.x 2.0.0 <=y < 5.0.0** 2.0.0 <= z < 5.0.0**

使用SpringBoot整合Elasticsearch,一般都是使用 SpringData 进行封装的,然后再dao层接口继承ElasticsearchRepository 类,该类实现了很多的方法,比如常用的CRUD方法。这里使用Elasticsearch 5.6.11+SpringBoot 2.0.5+JDK 1.8版本搭建开发环境。

2、pom配置

<dependency>
    <groupId>org.elasticsearch</groupId>
    <artifactId>elasticsearch</artifactId>
    <version>5.6.11</version>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
    <version>2.0.5.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-elasticsearch</artifactId>
    <version>3.0.10.RELEASE</version>
</dependency>

2、application.properties的配置

spring.data.elasticsearch.repositories.enabled = true  //使用elasticsearch仓库
spring.data.elasticsearch.cluster-nodes = 127.0.0.1:9300  //默认
spring.data.elasticsearch.cluster-name = my-application  //要与elasticsearch.yml中使用的集群名称一致

3、索引与查询实例

entity层:

package com.exm.springmybatis.entity;

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

import java.io.Serializable;
import java.util.Date;

@Document(indexName ="es_article",type = "article",indexStoreType = "fs",shards = 5,replicas = 1)
public class Article implements Serializable {
    @Id
    private Long id;
    private String title;  //标题
    private String abstracts;  //摘要
    private String content;  //内容
    private Date postTime;  //发表时间

    //set和get方法省略了
}

使用SpringData的时候,它需要在实体类中设置indexName 和type ,如果和传统型数据库比较的话,就相当于库和表。需要注意的是indexName和type都必须是小写!!!

dao层:

package com.exm.springmybatis.dao;

import com.exm.springmybatis.entity.Article;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
import org.springframework.stereotype.Repository;

public interface ArticleSearchRepository extends ElasticsearchRepository<Article,Long> {

}

dao层只需继承ElasticsearchRepository该类。其中主要的方法就是 save、delete和search,其中save方法相当如insert和update,没有就新增,有就覆盖。delete方法主要就是删除数据以及索引库。至于search就是查询了,包括一些常用的查询,如分页、权重之类的。

controller层:

package com.exm.springmybatis.controller;

import com.exm.springmybatis.dao.ArticleSearchRepository;
import com.exm.springmybatis.entity.Article;
import org.elasticsearch.index.query.QueryStringQueryBuilder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Date;
import java.util.Iterator;


@RestController
public class ESController {
    @Autowired
    ArticleSearchRepository articleSearchRepository;

    @RequestMapping("/add")
    public void testSaveArticleIndex() {
        Article article = new Article();
        article.setId(1L);
        article.setTitle("springboot integreate elasticsearch");
        article.setAbstracts("springboot integreate elasticsearch is very easy");
        article.setContent("elasticsearch based on lucene");
        article.setPostTime(new Date());
        articleSearchRepository.save(article);
    }

    @RequestMapping("/query")
    public void testSearch() {
        String queryString = "springboot";//搜索关键字
        QueryStringQueryBuilder builder = new QueryStringQueryBuilder(queryString);
        Iterable<Article> searchResult = articleSearchRepository.search(builder);
        Iterator<Article> iterator = searchResult.iterator();
        while (iterator.hasNext()) {
            Article article = iterator.next();
            System.out.println(article.getContent());
        }
    }
}

Controller层注意类注释是@RestController。由于例子比较简单Server层就没有写了。

索引:http://localhost:8090/add

搜索:http://localhost:8090/query

head查看索引:http://localhost:9100

猜你喜欢

转载自blog.csdn.net/csmnjk/article/details/82968812