前言:

最近因为工作中用到Elasticsearch,之前没接触过,所以学习了一下Elasticsearch搜索引擎,自己在本地搭建了一下过程,记录一下。

首先我查了一下springBoot版本和Elasticsearch的对应关系,因为在项目中使用的springBoot是2.1的版本,而且在本地测试,本地安装,所以下载的是windows版的Elasticsearch6.2服务。

顺便说一下,本地jdk安装的版本是1.8,刚好对应Elasticsearch 6.X的版本,7.X以上版本的需要jdk11以上的版本对应,需要使用Elasticsearch的同学要注意官网上的版本对应介绍,以免出现一些未知的bug。

安装Elasticsearch6.2.4教程

官网下载页面:

https://www.elastic.co/guide/en/elasticsearch/reference/6.2/zip-windows.html

或者直接下载安装包:

https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.2.4.zip

或者csdn下载:

https://download.csdn.net/download/Maomaoqifeng/16524832

解压:

配置:在config文件夹中找到elasticsearch.yml文件,修改其中的配置,将这几项前面的#号去掉,并将内容修改成下方所示;

cluster.name: my-application
network.host: 127.0.0.1
http.port: 9200

启动:双击elasticsearch.bat即可启动,如果jdk对应无误的话就可以启动成功;

启动成功:

创建项目demo

建立springBoot项目:

设置分组名称和项目名称;

在web中选择web依赖,NoSQL中选择Elasticsearch依赖;

点击下一步点击完成即可;

项目demo

先修改pom.xml文件,引入elasticsearch和elasticsearch.client,这里我用的版本是6.4.1;

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.3.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.qqf.example</groupId><artifactId>springboot-elasticsearch-demo</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><name>springboot-elasticsearch-demo</name><description>Demo project for Spring Boot</description><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version><elasticsearch.version>6.4.1</elasticsearch.version><spring.data.elasticsearch.version>3.1.0.RELEASE</spring.data.elasticsearch.version></properties><dependencies><dependency><groupId>org.elasticsearch</groupId><artifactId>elasticsearch</artifactId><version>${elasticsearch.version}</version></dependency><dependency><groupId>org.elasticsearch.client</groupId><artifactId>transport</artifactId><version>${elasticsearch.version}</version></dependency><dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-client</artifactId><version>${elasticsearch.version}</version></dependency><dependency><groupId>org.elasticsearch.plugin</groupId><artifactId>transport-netty4-client</artifactId><version>${elasticsearch.version}</version></dependency><dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-elasticsearch</artifactId><version>${spring.data.elasticsearch.version}</version></dependency><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>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></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></project>

在修改配置文件application.properties:其中的cluster-name需要和上面在Elasticsearch的yml文件中设置的一致。

spring.data.elasticsearch.cluster-name=my-application
spring.data.elasticsearch.cluster-nodes=127.0.0.1:9300

建立实体类Commodity :

package com.qqf.example.springbootelasticsearchdemo.entity;import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;import java.io.Serializable;
@Data
@Document(indexName = "commodity")
public class Commodity implements Serializable {@Idprivate String skuId;private String name;private String category;private Integer price;private String brand;private Integer stock;}

建立dao层:

package com.qqf.example.springbootelasticsearchdemo.dao;import com.qqf.example.springbootelasticsearchdemo.entity.Commodity;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
import org.springframework.stereotype.Repository;@Repository
public interface CommodityRepository extends ElasticsearchRepository <Commodity,String>{
}

建立service接口以及实现层:

package com.qqf.example.springbootelasticsearchdemo.service;import com.qqf.example.springbootelasticsearchdemo.entity.Commodity;
import org.springframework.data.domain.Page;import java.util.List;public interface CommodityService {long count();Commodity save(Commodity commodity);void delete(Commodity commodity);Iterable<Commodity> getAll();List<Commodity> getByName(String name);Page<Commodity> pageQuery(Integer pageNo,Integer pageSize,String kw);
}
package com.qqf.example.springbootelasticsearchdemo.service.impl;import com.qqf.example.springbootelasticsearchdemo.dao.CommodityRepository;
import com.qqf.example.springbootelasticsearchdemo.entity.Commodity;
import com.qqf.example.springbootelasticsearchdemo.service.CommodityService;
import org.elasticsearch.index.query.MatchQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.elasticsearch.core.query.NativeSearchQuery;
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
import org.springframework.data.elasticsearch.core.query.SearchQuery;
import org.springframework.stereotype.Service;import java.util.ArrayList;
import java.util.List;
@Service
public class CommodityServiceImpl implements CommodityService {@Autowiredprivate CommodityRepository commodityRepository;@Overridepublic long count() {return commodityRepository.count();}@Overridepublic Commodity save(Commodity commodity) {return commodityRepository.save(commodity);}@Overridepublic void delete(Commodity commodity) {commodityRepository.delete(commodity);}@Overridepublic Iterable<Commodity> getAll() {return commodityRepository.findAll();}@Overridepublic List<Commodity> getByName(String name) {List<Commodity> list=new ArrayList<>();MatchQueryBuilder matchQueryBuilder=new MatchQueryBuilder("name",name);Iterable<Commodity> iterable=commodityRepository.search(matchQueryBuilder);iterable.forEach(e->list.add(e));return list;}@Overridepublic Page<Commodity> pageQuery(Integer pageNo, Integer pageSize, String kw) {SearchQuery searchQuery=new NativeSearchQueryBuilder().withQuery(QueryBuilders.matchPhraseQuery("name",kw)).withPageable(PageRequest.of(pageNo, pageSize)).build();return commodityRepository.search(searchQuery);}
}

建立Controller层:

package com.qqf.example.springbootelasticsearchdemo.controller;import com.qqf.example.springbootelasticsearchdemo.entity.Commodity;
import com.qqf.example.springbootelasticsearchdemo.service.CommodityService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.List;@RestController
public class ElasticsearchDemoController {@Autowiredprivate CommodityService commodityService;@RequestMapping("/contextLoads")public void contextLoads() {System.out.println(commodityService.count());}@RequestMapping("/testInsert")public void testInsert() {Commodity commodity = new Commodity();commodity.setSkuId("1501009001");commodity.setName("原味切片面包(10片装)");commodity.setCategory("101");commodity.setPrice(880);commodity.setBrand("良品铺子");commodityService.save(commodity);commodity = new Commodity();commodity.setSkuId("1501009002");commodity.setName("原味切片面包(6片装)");commodity.setCategory("101");commodity.setPrice(680);commodity.setBrand("良品铺子");commodityService.save(commodity);commodity = new Commodity();commodity.setSkuId("1501009004");commodity.setName("元气吐司850g");commodity.setCategory("101");commodity.setPrice(120);commodity.setBrand("百草味");commodityService.save(commodity);}@RequestMapping("/testDelete")public void testDelete() {Commodity commodity = new Commodity();commodity.setSkuId("1501009002");commodityService.delete(commodity);}@RequestMapping("/testGetAll")public void testGetAll() {Iterable<Commodity> iterable = commodityService.getAll();iterable.forEach(e->System.out.println(e.toString()));}@RequestMapping("/testGetByName")public void testGetByName() {List<Commodity> list = commodityService.getByName("面包");System.out.println(list);}@RequestMapping("/testPage")public void testPage() {Page<Commodity> page = commodityService.pageQuery(0, 10, "切片");System.out.println(page.getTotalPages());System.out.println(page.getNumber());System.out.println(page.getContent());}
}

项目结构:

启动springboot

在浏览器发起请求:

打印结果:

发起请求:

打印结果:

完成,demo已经可以正常请求了,鼓励一下!

SpringBoot+Elasticsearch实现过程相关推荐

  1. 聊聊springboot elasticsearch healthIndicator

    序 本文主要研究一下springboot elasticsearch healthIndicator ElasticsearchHealthIndicatorProperties spring-boo ...

  2. elasticsearch安装过程中的license问题解决办法

    elasticsearch安装过程中的license问题解决办法 参考文章: (1)elasticsearch安装过程中的license问题解决办法 (2)https://www.cnblogs.co ...

  3. 【Elasticsearch】Elasticsearch 查询过程中的 pre-filter 原理

    1.概述 转载:添Elasticsearch 查询过程中的 pre-filter 原理 大家都知道在对索引执行查询的时候,需要在所有的分片上执行查询,因为无法知道被查询的关键词位于哪个分片,对于全文查 ...

  4. springboot+elasticsearch+bboss框架集成遇到的坑

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.为什么要用bboss? 二.遇到的坑 1.kibana.head页面查询结果不一致 2.head查询结果与bbos ...

  5. springboot+elasticsearch+neo4j+vue+activiti数字知识库管理系统

    文章目录 前言 一.项目概要 二.相关技术点 1.富文本编辑器 2.全文检索 3.知识图谱 4.工作流 总结 前言 在数字化高度普及的时代,企事业机关单位在日常工作中会产生大量的文档,例如医院制度汇编 ...

  6. linux中license路径,Elasticsearch安装过程中的license问题解决办法

    Elasticsearch安装过程中的license问题解决办法 1.git clone git://github.com/mobz/elasticsearch-head.git 2.cd elast ...

  7. SpringBoot Elasticsearch

    文章目录 Windwos Elasticsearch Elasticsearch 基本介绍 Elasticsearch 6.8.5 单机安装 kibana6.8.5 可视化工具 Springboot ...

  8. SpringBoot Elasticsearch组合查询封装

    最近项目组需要用到Elasticsearch,封装了ESQueryBuilder方便条件组合,结合ES工具类使用效果更佳,下面是ES工具类传送门: SpringBoot Elasticsearch工具 ...

  9. springboot ElasticSearch配置自定义转换器ElasticsearchCustomConversions

    springboot ElasticSearch配置自定义转换器ElasticsearchCustomConversions 问题场景 在将Timestamp类型存进Elasticsearc后,将其取 ...

最新文章

  1. vb.net 正则 替换 第n个_Python中正则表达式模块详解
  2. 利用Python中的numpy.ndarray.reshape()对阵列形状进行调整
  3. 在命令行中管理 Wifi 连接
  4. 避免许多if块进行验证检查
  5. zz 聊聊并发(一)
  6. 10个管理工作时间的小技巧
  7. LeetCode 1781. 所有子字符串美丽值之和
  8. hwui opengl VS skia opengl VS skia vulkan?
  9. python科学计算环境配置_Python科学计算环境推荐――Anaconda
  10. matlab可达矩阵 结果,matlab可达矩阵
  11. EasyX基础入门——这一篇就够啦
  12. 解决本地网络适配器的驱动程序可能出现问题(未连接,连接可用或连接不可用)
  13. 教你如何焊接BGA芯片技巧
  14. html表格新插入一列,VUE table表格动态添加一列数据,新增的这些数据不可以编辑(v-...
  15. 大数据工程师、BI工程师、数据库工程师什么区别?
  16. 英语作文计算机的利弊,电脑游戏的坏处英语作文
  17. java集合源码分析
  18. android10管理权限,Android 权限管理
  19. substrate node cli
  20. python学习之路(3)turtle画奥运五环

热门文章

  1. 年底了,骗子们也要冲业绩了
  2. Android:TV设置遥控器组合键
  3. 解决win10开启Hyper-V失败
  4. lucene2.4 gong on
  5. Cisco AP镜像中的ap1g1 ap1g2,ap3g1什么含义?
  6. 新时达工业机器人技术储备_建成年产万台机器人工厂后, 新时达在想些什么?...
  7. 推荐5款常用的有限元分析CAE软件
  8. 从“将男朋友转化为老公”的评价体系谈数据分析
  9. discuz论坛 模板修改
  10. php与python缺点_php,python,ruby,perl的优缺点?