SpringBoot集成ElasticSearch (附版本)

现在是2019年8月23日,elasticsearch 5.6.8可以正常使用.

大概讲一下集成过程中遇到的问题,方便有人需要的时候参考.

个人感觉elasticsearch的版本问题比较麻烦,它的版本更新太快,而spring boot 没有跟上,就导致在集成过程中总会有各种版本问题.在经历各种问题之后,总算将elasticsearch集成到了springboot上.

项目地址:https://github.com/wannengdek/SpringBoot-ElasticSearch

如果项目对您有所帮助,麻烦帮忙点亮小⭐⭐

版本

Windows版本: 5.6.8

spring-boot-starter-parent : 2.0.1.RELEASE

spring-boot-starter-data-elasticsearch  :  2.0.1.RELEASE

spring-data-elasticsearch :  3.0.6.RELEASE

以下是版本截图

 

spring-boot-starter-data-elasticsearch :

<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starters</artifactId>
    <version>2.0.1.RELEASE</version>
  </parent>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
  <version>2.0.1.RELEASE</version>
  <name>Spring Boot Data Elasticsearch Starter</name>
  <description>Starter for using Elasticsearch search and analytics engine and Spring
		Data Elasticsearch</description>
  <url>https://projects.spring.io/spring-boot/#/spring-boot-parent/spring-boot-starters/spring-boot-starter-data-elasticsearch</url>
  <organization>
    <name>Pivotal Software, Inc.</name>
    <url>https://spring.io</url>
  </organization>
  <licenses>
    <license>
      <name>Apache License, Version 2.0</name>
      <url>http://www.apache.org/licenses/LICENSE-2.0</url>
    </license>
  </licenses>
  <developers>
    <developer>
      <name>Pivotal</name>
      <email>info@pivotal.io</email>
      <organization>Pivotal Software, Inc.</organization>
      <organizationUrl>http://www.spring.io</organizationUrl>
    </developer>
  </developers>
  <scm>
    <connection>scm:git:git://github.com/spring-projects/spring-boot.git/spring-boot-starters/spring-boot-starter-data-elasticsearch</connection>
    <developerConnection>scm:git:ssh://git@github.com/spring-projects/spring-boot.git/spring-boot-starters/spring-boot-starter-data-elasticsearch</developerConnection>
    <url>http://github.com/spring-projects/spring-boot/spring-boot-starters/spring-boot-starter-data-elasticsearch</url>
  </scm>
  <issueManagement>
    <system>Github</system>
    <url>https://github.com/spring-projects/spring-boot/issues</url>
  </issueManagement>
  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter</artifactId>
      <version>2.0.1.RELEASE</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework.data</groupId>
      <artifactId>spring-data-elasticsearch</artifactId>
      <version>3.0.6.RELEASE</version>
      <scope>compile</scope>
      <exclusions>
        <exclusion>
          <artifactId>jcl-over-slf4j</artifactId>
          <groupId>org.slf4j</groupId>
        </exclusion>
        <exclusion>
          <artifactId>log4j-core</artifactId>
          <groupId>org.apache.logging.log4j</groupId>
        </exclusion>
      </exclusions>
    </dependency>
  </dependencies>
</project>

在安装过程中如果遇到版本问题,可以去它的官网去查看对应得版本.

配置文件:

spring.data.elasticsearch.cluster-nodes=localhost:9300
# 设置连接超时时间
spring.data.elasticsearch.properties.transport.tcp.connect_timeout=120s

# ELASTICSEARCH (ElasticsearchProperties)
spring.data.elasticsearch.cluster-name=elasticsearch 
  # Elasticsearch cluster name.
spring.data.elasticsearch.repositories.enabled=true 

测试

bean :

@Document(indexName = "blog",type = "blog")//elasticsearch的注解
public class EsBlog implements Serializable {

	private static final long serialVersionUID = 4564729518133694581L;
	@Id
	private String id;
	private String title;
	private String summary;
	private String content;


	protected EsBlog() {  // JPA 的规范要求无参构造函数;设为 protected 防止直接使用 
	}

	public EsBlog(String title, String content,String summary) {
		this.title = title;
		this.content = content;
		this.summary = summary ;
	}



	public String getId() {
		return id;
	}

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

	public String getTitle() {
		return title;
	}

	public void setTitle(String title) {
		this.title = title;
	}

	public String getContent() {
		return content;
	}

	public void setContent(String content) {
		this.content = content;
	}
 
	public String getSummary() {
		return summary;
	}

	public void setSummary(String summary) {
		this.summary = summary;
	}

	@Override
	public String toString() {
		return "EsBlog{" +
				"id='" + id + '\'' +
				", title='" + title + '\'' +
				", summary='" + summary + '\'' +
				", content='" + content + '\'' +
				'}';
	}
}

Repository:

public interface EsBlogRepository extends ElasticsearchRepository<EsBlog, String> {

	Page<EsBlog> findDistinctEsBlogByTitleContainingOrSummaryContainingOrContentContaining(String title,String summary,String content,Pageable pageable);
}
它继承了es的接口,自动实现.

测试类

package dk.coding.blog;

import dk.coding.blog.bean.EsBlog;
import dk.coding.blog.repository.es.EsBlogRepository;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest
public class BlogApplicationTests {


    @Autowired
    private EsBlogRepository esBlogRepository;
    
    @Before
    public void initData() {
        // 清空所有
        esBlogRepository.deleteAll();

        esBlogRepository.save(new EsBlog("登鹳雀楼","王之涣的诗",
                "白日依山尽,黄河入海流。欲穷千里目,更上一层楼。"));
        esBlogRepository.save(new EsBlog("相思","王维的诗",
                "红豆生南国,春来发几枝。愿君多采撷,此物最相思。"));
        esBlogRepository.save(new EsBlog("静夜思","李白的诗",
                "床前明月光,疑是地上霜。举头望明月,低头思故乡。"));
    }

    @Test
    public void findDistinctEsBlogByTitleContainingOrSummaryContainingOrContentContaining() {
        Pageable  pageable = new PageRequest(0, 20);
        String title = "思";
        String summary = "相思";
        String content = "相思";
        Page<EsBlog> page = esBlogRepository.findDistinctEsBlogByTitleContainingOrSummaryContainingOrContentContaining(
                title, summary, content, pageable);
        System.out.println(page.getTotalElements());
        for(EsBlog blog : page.getContent()) {
            System.out.println(blog);
        }
    }

    }

这个测试类的是要查找title中含有“思”字或者summary中含有“相思”或者content中含有“相思”的内容。理论上应该返回除了登鹳雀楼以外的两条数据。

结果:

 

EsBlogController

@RestController
@RequestMapping("/blogs")
public class EsBlogController {

    @Autowired
    private EsBlogRepository esBlogRepository;

    @GetMapping
    public List<EsBlog> list(@RequestParam("title") String title,
                             @RequestParam("summary") String summary,
                             @RequestParam("content") String content,
                             @RequestParam(value="pageIndex",defaultValue="0") int pageIndex,
                             @RequestParam(value="pageSize",defaultValue="10") int pageSize){
        Pageable pageable = new PageRequest(pageIndex, pageSize);
        //数据是在junit测试中初始化的
        Page<EsBlog> page = esBlogRepository.findDistinctEsBlogByTitleContainingOrSummaryContainingOrContentContaining(
                title, summary, content, pageable);
        return page.getContent();
    }

}

整合完成,此篇博客还有不少需要完善之处,我将渐渐完善.

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值