欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

SpringBoot整合ElasticSearch实践

程序员文章站 2024-02-17 14:34:28
本节我们基于一个发表文章的案例来说明springboot如何elasticsearch集成。elasticsearch本身可以是一个独立的服务,也可以嵌入我们的web应用中...

本节我们基于一个发表文章的案例来说明springboot如何elasticsearch集成。elasticsearch本身可以是一个独立的服务,也可以嵌入我们的web应用中,在本案例中,我们讲解如何将elasticsearch嵌入我们的应用中。

案例背景:每个文章(article)都要属于一个教程(tutorial),而且每个文章都要有一个作者(author)。

一、实体设计:

tutorial.java

public class tutorial implements serializable{
 private long id;
 private string name;//教程名称
 
 //setters and getters
 //tostring
}

author.java

public class author implements serializable{
 /**
 * 作者id
 */
 private long id;
 /**
 * 作者姓名
 */
 private string name;
 /**
 * 作者简介
 */
 private string remark;
 
 //setters and getters
 //tostring
 
}

article.java

public class article implements serializable{
 private long id;
 /**标题*/
 private string title;
 /**摘要*/
 private string abstracts;
 /**内容*/
 private string content;
 /**发表时间*/
 private date posttime;
 /**点击率*/
 private long clickcount;
 /**作者*/
 private author author;
 /**所属教程*/
 private tutorial tutorial;
 
 //setters and getters
 //tostring
}

二、整合springboot与elasticsearch

1、引入相应的依赖

pom.xml

<parent>
 <groupid> org.springframework.boot </groupid>
 <artifactid> spring-boot-starter-parent </artifactid>
 <version> 1.3.0.release </version>
 </parent>
 
 <dependencies>
     <!-- 添加 web 应用的依赖 -->
 <dependency>
  <groupid> org.springframework.boot </groupid>
  <artifactid> spring-boot-starter-web </artifactid>
 </dependency>
 <!-- 添加 spring-data-elasticsearch的依赖 -->
 <dependency>
  <groupid> org.springframework.boot </groupid>
  <artifactid> spring-boot-starter-data-elasticsearch </artifactid>
 </dependency>
 <dependency>
  <groupid> org.springframework.boot</groupid>
  <artifactid> spring-boot-starter-test </artifactid>
 </dependency>
 </dependencies>

2、修改配置文件

application.yml

spring:
  data:
    elasticsearch: 
      cluster-name: #默认为elasticsearch
      cluster-nodes: #配置es节点信息,逗号分隔,如果没有指定,则启动clientnode
      properties:
        path:
         logs: ./elasticsearch/log #elasticsearch日志存储目录
         data: ./elasticsearch/data #elasticsearch数据存储目录

这些配置的属性,最终会设置到elasticsearchproperties这个实体中。

3、为实体添加elascticsearch的注解

spring-data-elasticsearch提供了一些注解来帮助我们快速针对实体建立索引。

SpringBoot整合ElasticSearch实践

因为我们希望article作为我们文章的搜索入口,所以我们在article类上添加@document注解。

@document(indexname="projectname",type="article",indexstoretype="fs",shards=5,replicas=1,refreshinterval="-1")
public class article implements serializable{
....
}

默认情况下,添加@document注解会对实体中的所有属性建立索引,由于本教程是讲解如何整合,并不是专门讲解elasticsearch,故对于其他注解不再讲解。

4、建立搜索类

我们只要编写一个接口articlesearchrepository,来继承spring-data-elasticsearch提供的elasticsearchrepository即可。

import org.springframework.data.elasticsearch.repository.elasticsearchrepository;
 
import com.tianshouzhi.springbootstudy.domain.article;
//泛型的参数分别是实体类型和主键类型
public interface articlesearchrepository extends elasticsearchrepository<article, long>{
 
}

5、单元测试

5.1、创建索引

@runwith(springjunit4classrunner.class)
@springapplicationconfiguration(classes = application.class)
public class elasticsearchtest {
 
 @autowired
 private articlesearchrepository articlesearchrepository;
 @test
 public void testsavearticleindex(){
 author author=new author();
 author.setid(1l);
 author.setname("tianshouzhi");
 author.setremark("java developer");
 
 tutorial tutorial=new tutorial();
 tutorial.setid(1l);
 tutorial.setname("elastic search");
 
 article article =new article();
 article.setid(1l);
 article.settitle("springboot integreate elasticsearch");
 article.setabstracts("springboot integreate elasticsearch is very easy");
 article.settutorial(tutorial);
 article.setauthor(author);
 article.setcontent("elasticsearch based on lucene,"
  + "spring-data-elastichsearch based on elaticsearch"
  + ",this tutorial tell you how to integrete springboot with spring-data-elasticsearch");
 article.setposttime(new date());
 article.setclickcount(1l);
 
 articlesearchrepository.save(article);
 }
 
}

运行单元测试,项目根目录下出现:

SpringBoot整合ElasticSearch实践

说明我们索引已经创建成功。

5.2测试搜索:

@test
 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()){
  system.out.println(iterator.next());
 }
 }

运行单元测试,控制台输出

复制代码 代码如下:

article [id=1, title=springboot integreate elasticsearch, abstracts=springboot integreate elasticsearch is very easy, content=elasticsearch based on lucene,spring-data-elastichsearch based on elaticsearch,this tutorial tell you how to integrete springboot with spring-data-elasticsearch, posttime=sun feb 21 16:01:37 cst 2016, clickcount=1, author=author [id=1, name=tianshouzhi, remark=java developer], tutorial=tutorial [id=1, name=elastic search]]

说明搜索成功。读者可以尝试其他的搜索关键字进行搜索。

 说明:以上方式是springboot与elasticsearch进行本地整合,即将elasticsearch内嵌在应用,如果我们搭建了elasticsearch集群,只需要将配置改为如下配置即可:

spring:
  data:
    elasticsearch: 
      cluster-nodes:115.28.65.149:9300 #配置es节点信息,逗号分隔,如果没有指定,则启动clientnode

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。