SpringBoot+Elasticsearch实现过程
前言:
最近因为工作中用到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实现过程相关推荐
- 聊聊springboot elasticsearch healthIndicator
序 本文主要研究一下springboot elasticsearch healthIndicator ElasticsearchHealthIndicatorProperties spring-boo ...
- elasticsearch安装过程中的license问题解决办法
elasticsearch安装过程中的license问题解决办法 参考文章: (1)elasticsearch安装过程中的license问题解决办法 (2)https://www.cnblogs.co ...
- 【Elasticsearch】Elasticsearch 查询过程中的 pre-filter 原理
1.概述 转载:添Elasticsearch 查询过程中的 pre-filter 原理 大家都知道在对索引执行查询的时候,需要在所有的分片上执行查询,因为无法知道被查询的关键词位于哪个分片,对于全文查 ...
- springboot+elasticsearch+bboss框架集成遇到的坑
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.为什么要用bboss? 二.遇到的坑 1.kibana.head页面查询结果不一致 2.head查询结果与bbos ...
- springboot+elasticsearch+neo4j+vue+activiti数字知识库管理系统
文章目录 前言 一.项目概要 二.相关技术点 1.富文本编辑器 2.全文检索 3.知识图谱 4.工作流 总结 前言 在数字化高度普及的时代,企事业机关单位在日常工作中会产生大量的文档,例如医院制度汇编 ...
- linux中license路径,Elasticsearch安装过程中的license问题解决办法
Elasticsearch安装过程中的license问题解决办法 1.git clone git://github.com/mobz/elasticsearch-head.git 2.cd elast ...
- SpringBoot Elasticsearch
文章目录 Windwos Elasticsearch Elasticsearch 基本介绍 Elasticsearch 6.8.5 单机安装 kibana6.8.5 可视化工具 Springboot ...
- SpringBoot Elasticsearch组合查询封装
最近项目组需要用到Elasticsearch,封装了ESQueryBuilder方便条件组合,结合ES工具类使用效果更佳,下面是ES工具类传送门: SpringBoot Elasticsearch工具 ...
- springboot ElasticSearch配置自定义转换器ElasticsearchCustomConversions
springboot ElasticSearch配置自定义转换器ElasticsearchCustomConversions 问题场景 在将Timestamp类型存进Elasticsearc后,将其取 ...
最新文章
- vb.net 正则 替换 第n个_Python中正则表达式模块详解
- 利用Python中的numpy.ndarray.reshape()对阵列形状进行调整
- 在命令行中管理 Wifi 连接
- 避免许多if块进行验证检查
- zz 聊聊并发(一)
- 10个管理工作时间的小技巧
- LeetCode 1781. 所有子字符串美丽值之和
- hwui opengl VS skia opengl VS skia vulkan?
- python科学计算环境配置_Python科学计算环境推荐――Anaconda
- matlab可达矩阵 结果,matlab可达矩阵
- EasyX基础入门——这一篇就够啦
- 解决本地网络适配器的驱动程序可能出现问题(未连接,连接可用或连接不可用)
- 教你如何焊接BGA芯片技巧
- html表格新插入一列,VUE table表格动态添加一列数据,新增的这些数据不可以编辑(v-...
- 大数据工程师、BI工程师、数据库工程师什么区别?
- 英语作文计算机的利弊,电脑游戏的坏处英语作文
- java集合源码分析
- android10管理权限,Android 权限管理
- substrate node cli
- python学习之路(3)turtle画奥运五环
热门文章
- 年底了,骗子们也要冲业绩了
- Android:TV设置遥控器组合键
- 解决win10开启Hyper-V失败
- lucene2.4 gong on
- Cisco AP镜像中的ap1g1 ap1g2,ap3g1什么含义?
- 新时达工业机器人技术储备_建成年产万台机器人工厂后, 新时达在想些什么?...
- 推荐5款常用的有限元分析CAE软件
- 从“将男朋友转化为老公”的评价体系谈数据分析
- discuz论坛 模板修改
- php与python缺点_php,python,ruby,perl的优缺点?