记录一下最入门的例子。

一:安装elasticsearch。

在mac上很简单,brew install elasticsearch。安装完成后启动,brew services start ElasticSearch就可以了。然后访问http://localhost:9200/,出现一个json串的界面就OK了。9200是http的端口,9300是给java用户的端口。
如果是linux,看看这篇http://blog.csdn.net/cwenao/article/details/54943505,包括修改cluster.name和network.host的作用。如果不修改cluster.name那么系统是有默认的值,在第三步设置application.yml时可以看到。如果是配置远程elasticsearch集群,则设置cluster.nodes为远程的地址。
这里我们什么都不改,默认就是本机。

二:新建spring boot的elasticsearch项目。

用idea新建,勾选web和nosql里的elasticsearch选项,等待创建完成即可。
起初我用spring boot1.5.3创建的,运行时死活报一个类找不到,后改用最新的2.0.0创建的就好了。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.example</groupId><artifactId>testelasticaearch</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><name>testelasticaearch</name><description>Demo project for Spring Boot</description><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.0.M1</version><relativePath/> <!-- lookup parent from repository --></parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>net.java.dev.jna</groupId><artifactId>jna</artifactId><version>3.0.9</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build><repositories><repository><id>spring-snapshots</id><name>Spring Snapshots</name><url>https://repo.spring.io/snapshot</url><snapshots><enabled>true</enabled></snapshots></repository><repository><id>spring-milestones</id><name>Spring Milestones</name><url>https://repo.spring.io/milestone</url><snapshots><enabled>false</enabled></snapshots></repository></repositories><pluginRepositories><pluginRepository><id>spring-snapshots</id><name>Spring Snapshots</name><url>https://repo.spring.io/snapshot</url><snapshots><enabled>true</enabled></snapshots></pluginRepository><pluginRepository><id>spring-milestones</id><name>Spring Milestones</name><url>https://repo.spring.io/milestone</url><snapshots><enabled>false</enabled></snapshots></pluginRepository></pluginRepositories></project>

除了net.java.dev.jna那个是新加的,别的都是项目勾选elasticsearch后自动创建的,新加的这个依赖是因为启动后也是报类不存在,后来在网上找个jna依赖加上后就好了。

三:配置yml文件。

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

四:创建javaBean文件。

我直接用http://www.tianshouzhi.com/api/tutorials/springboot/101这篇文章里的类。
把Author类和Tutorial类复制过来,还有Article类。简单说一下Article类。

package com.example.demo.pojo;import org.springframework.data.elasticsearch.annotations.Document;import java.io.Serializable;
import java.util.Date;/*** Created by admin on 17/6/1.*/
@Document(indexName="projectname",type="article",indexStoreType="fs",shards=5,replicas=1,refreshInterval="-1")
public class Article implements Serializable {@Idprivate Long id;/**标题*/private String title;/**摘要*/private String abstracts;/**内容*/private String content;/**发表时间*/private Date postTime;/**点击率*/private Long clickCount;/**作者*/private Author author;/**所属教程*/private Tutorial tutorial;public Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}public String getAbstracts() {return abstracts;}public void setAbstracts(String abstracts) {this.abstracts = abstracts;}public String getContent() {return content;}public void setContent(String content) {this.content = content;}public Date getPostTime() {return postTime;}public void setPostTime(Date postTime) {this.postTime = postTime;}public Long getClickCount() {return clickCount;}public void setClickCount(Long clickCount) {this.clickCount = clickCount;}public Author getAuthor() {return author;}public void setAuthor(Author author) {this.author = author;}public Tutorial getTutorial() {return tutorial;}public void setTutorial(Tutorial tutorial) {this.tutorial = tutorial;}@Overridepublic String toString() {return "Article{" +"id=" + id +", title='" + title + '\'' +", abstracts='" + abstracts + '\'' +", content='" + content + '\'' +", postTime=" + postTime +", clickCount=" + clickCount +", author=" + author +", tutorial=" + tutorial +'}';}
}

@Document注解里面的几个属性,类比mysql的话是这样:
index –> DB
type –> Table
Document –> row
@Id注解加上后,在Elasticsearch里相应于该列就是主键了,在查询时就可以直接用主键查询,后面一篇会讲到。其实和mysql非常类似,基本就是一个数据库。

@Persistent
@Inherited
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
public @interface Document {String indexName();//索引库的名称,个人建议以项目的名称命名String type() default "";//类型,个人建议以实体的名称命名short shards() default 5;//默认分区数short replicas() default 1;//每个分区默认的备份数String refreshInterval() default "1s";//刷新间隔String indexStoreType() default "fs";//索引文件存储类型
}

加上了@Document注解之后,默认情况下这个实体中所有的属性都会被建立索引、并且分词。
我们通过@Field注解来进行详细的指定,如果没有特殊需求,那么只需要添加@Document即可。

@Field注解的定义如下:@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
@Documented
@Inherited
public @interface Field {FieldType type() default FieldType.Auto;#自动检测属性的类型FieldIndex index() default FieldIndex.analyzed;#默认情况下分词DateFormat format() default DateFormat.none;String pattern() default "";boolean store() default false;#默认情况下不存储原文String searchAnalyzer() default "";#指定字段搜索时使用的分词器String indexAnalyzer() default "";#指定字段建立索引时指定的分词器String[] ignoreFields() default {};#如果某个字段需要被忽略boolean includeInParent() default false;
}

五:dao和controller

Dao:

public interface ArticleSearchRepository extends ElasticsearchRepository<Article, Long> {}

controller:

package com.example.demo;import com.example.demo.pojo.Article;
import com.example.demo.pojo.Author;
import com.example.demo.pojo.Tutorial;
import com.example.demo.repository.ArticleSearchRepository;
import org.elasticsearch.index.query.QueryStringQueryBuilder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.Date;
import java.util.Iterator;/*** Created by admin on 17/6/1.*/
@RestController
public class TestController {@Autowiredprivate ArticleSearchRepository articleSearchRepository;@RequestMapping("/add")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);}@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()) {System.out.println(iterator.next());}}
}

启动项目,先执行add,往elasticsearch添加一条数据,然后再访问query即可看到结果了。
其实非常类似于普通的DB查询,还支持很多条件查询,findAll,findTop之类的,就是JPA那一套可以直接用,因为继承的ElasticsearchRepository本身就是一个PagingAndSortingRepository。
参考:http://www.cnblogs.com/softidea/p/6102796.html

1 springboot整合elasticsearch入门例子相关推荐

  1. Springboot 整合 ElasticSearch 入门教学必看

    ElasticSearch 相比搜到这篇文章的人,都已经有过对它的了解, 一种流行的企业级搜索引擎,是一个分布式,高性能.高可用.可伸缩的搜索和分析系统. 那么用我粗俗的言语来说,它就是提供一个存储数 ...

  2. Springboot 整合ElasticSearch 常用的插入查询,模糊查询,范围查询

    前言 本来该篇教程就应该写到 Springboot 整合 ElasticSearch 入门教学必看 https://blog.csdn.net/qq_35387940/article/details/ ...

  3. Springboot整合Elasticsearch(High-level-Client)

    前言 通过学习Elasticsearch一小段时间来稍微认识了一点ES的体系架构.发现ES最大的坑就是版本兼容性问题了-在整合Springboot也不例外,但是,有一种方式能较好的解决-通过restc ...

  4. SpringBoot整合Elasticsearch详细步骤以及代码示例(附源码)

    准备工作# 环境准备# JAVA版本 Copy java version "1.8.0_121" Java(TM) SE Runtime Environment (build 1. ...

  5. 【十九】springboot整合ElasticSearch实战(万字篇)

    本章开始学习springboot整合ElasticSearch 7.X版本并通过小demo实现基本的增删改查.实现如下案例: 1.当向数据新增一个商品信息时,同时向rabbitMQ发起消息(异步实现) ...

  6. 【数据篇】SpringBoot 整合 Elasticsearch 实践数据搜索引擎

    写在最前 Elasticsearch 入门必读 Docker安装ELK Spring Data Elasticsearch 参考文档 版本选择 Spring Data Release Train Sp ...

  7. 分布式系列教程(30) -SpringBoot整合ElasticSearch

    1. 引言 代码已提交至Github,有兴趣的同学可以下载来看看:https://github.com/ylw-github/SpringBoot-ElasticSearch-Demo 2. Spri ...

  8. es springboot 不设置id_原创 | 一篇解决Springboot 整合 Elasticsearch

    ElasticSearch 结合业务的场景,在目前的商品体系需要构建搜索服务,主要是为了提供用户更丰富的检索场景以及高速,实时及性能稳定的搜索服务. ElasticSearch是一个基于Lucene的 ...

  9. 七、SpringBoot整合elasticsearch集群

    @Author : By Runsen @Date : 2020/6/12 作者介绍:Runsen目前大三下学期,专业化学工程与工艺,大学沉迷日语,Python, Java和一系列数据分析软件.导致翘 ...

最新文章

  1. 前端性能优化 —— 项目瘦身
  2. mysql事务并发控制_MySQL之事务及并发控制
  3. 职场10不要【来自网络】
  4. Tableau必知必会之如何做嵌套组合饼图
  5. java写一个音乐播放器源码_求一个JAVA音乐播放器的源代码
  6. 元素位置及宽度的计算总节
  7. 重装系统后删除Cygwin的安装文件
  8. Python编写学生类计算年龄、成绩等级
  9. ubuntu下的libfetion飞信
  10. php程序员后期发展前景,浅谈php程序员发展前景(一)
  11. 软件工程实践 第四周第二次会议讨论
  12. 开启docker远程访问
  13. 男生必学,与女生聊天技巧
  14. Notepad++ 安装 HexEditor 插件
  15. @Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED) 和 @NotAudited
  16. 2016.7.14 如何在浏览器中查看jsp文件
  17. tail命令,实时查看日志文件
  18. HZNU1883CCJ的直线化简
  19. 解决input 中 type=“number“右侧上下箭头以及取消默认滚轮事件
  20. Win10系统下语音识别聆听功能使用方法

热门文章

  1. svg 读取SVG文件并绘制矩形框选择图元
  2. 5 款逆向工具,7 款代码分析工具,11 项优化建议
  3. C语言二分查找算法[基础算法]
  4. mysql英文怎么发音_英语口语怎么练最有效?知道这3个方法就够了!
  5. 小程序生成二维码 发布版本无法显示 测试和体验版正常
  6. 全球手机处理器架构进化论:从ARM9到A15
  7. Windows环境下安装scrapy
  8. 中国最牛的“创业帮派”
  9. Google出品的Python代码静态类型分析器:Pytype
  10. vue2 django前后端分离(一.环境搭建)