ElasticSearch怎么在Spring boot中使用
这期内容当中小编将会给大家带来有关ElasticSearch怎么在Spring boot中使用,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
1.安装ElasticSearch
解压,到bin目录,双击elasticsearch.bat
1.1安装elasticsearch-head
https://github.com/mobz/elasticsearch-head
elasticsearch-head是一个网页查看elasticsearch状态,操作的第三方东西
gitclonegit://github.com/mobz/elasticsearch-head.git cdelasticsearch-head npminstall npmrunstart openhttp://localhost:9100/
要先安装node.js
config/elasticsearch.yml 文件增加
http.cors.enabled: truehttp.cors.allow-origin: “*”
elasticsearch-head/Gruntfile.js
connect:{
server:{
options:{
hostname:'0.0.0.0',
port:9100,
base:'.',
keepalive:true
}
}
}8082改成你自己的端口
http://127.0.0.1:8082/swagger-ui.html#/
0是第一页
application.properties
#===esstart=== spring.data.elasticsearch.repositories.enabled=true spring.data.elasticsearch.cluster-nodes=127.0.0.1:9300 #===esend===
2.porm
4.0.0 org.springframework.boot spring-boot-starter-parent 2.1.1.RELEASE com.example demo 0.0.1-SNAPSHOT demo DemoprojectforSpringBoot jar 1.8 io.springfox springfox-swagger2 2.6.1 io.springfox springfox-swagger-ui 2.6.1 org.springframework.boot spring-boot-starter-data-elasticsearch org.springframework.boot spring-boot-starter org.springframework.boot spring-boot-starter-test test org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-maven-plugin
主要添加spring-boot-starter-data-elasticsearch,注意spring-boot-starter-parent的版本号
3. GoodsInfo
packagecom.example.demo.domain;
importorg.springframework.data.elasticsearch.annotations.Document;
importjava.io.Serializable;
@Document(indexName="testgoods",type="goods")
publicclassGoodsInfoimplementsSerializable{
privateLongid;
privateStringname;
privateStringdescription;
publicLonggetId(){
returnid;
}
publicvoidsetId(Longid){
this.id=id;
}
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}
publicStringgetDescription(){
returndescription;
}
publicvoidsetDescription(Stringdescription){
this.description=description;
}
publicGoodsInfo(Longid,Stringname,Stringdescription){
this.id=id;
this.name=name;
this.description=description;
}
publicGoodsInfo(){
}
}indexName 类似数据库名称,type类似表名字
4. GoodsRepository
packagecom.example.demo.repository; importcom.example.demo.domain.GoodsInfo; importorg.springframework.data.elasticsearch.repository.ElasticsearchRepository; importorg.springframework.stereotype.Component; @Component publicinterfaceGoodsRepositoryextendsElasticsearchRepository{ }
这里会帮你封装了很多了
5. HelloWorldController
packagecom.example.demo.controller;
importcom.example.demo.domain.GoodsInfo;
importcom.example.demo.repository.GoodsRepository;
importio.swagger.annotations.Api;
importio.swagger.annotations.ApiImplicitParam;
importio.swagger.annotations.ApiOperation;
importorg.elasticsearch.index.query.QueryBuilder;
importorg.elasticsearch.index.query.QueryBuilders;
importorg.elasticsearch.index.query.functionscore.FunctionScoreQueryBuilder;
importorg.springframework.beans.factory.annotation.Autowired;
importorg.springframework.data.domain.Page;
importorg.springframework.data.domain.PageRequest;
importorg.springframework.data.domain.Pageable;
importorg.springframework.data.elasticsearch.core.query.NativeSearchQuery;
importorg.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
importorg.springframework.data.elasticsearch.core.query.SearchQuery;
importorg.springframework.stereotype.Controller;
importorg.springframework.web.bind.annotation.*;
importjava.util.List;
importjava.util.Optional;
importstaticorg.elasticsearch.index.query.QueryBuilders.queryStringQuery;
@Controller
@Api(value="HelloWorldController|一个用来测试swagger注解的控制器",tags="HelloWorldController",description="HelloWorldController")
publicclassHelloWorldController{
@Autowired
privateGoodsRepositorygoodsRepository;
@ResponseBody
@RequestMapping(value="/hello",method=RequestMethod.GET)
@ApiOperation(value="根据用户编号获取用户姓名",notes="test:仅1和2有正确返回")
@ApiImplicitParam(paramType="query",name="userNumber",value="用户编号",required=true,dataType="Integer")
publicStringindex(@RequestParamIntegeruserNumber){
if(userNumber==1){
return"小白";
}
elseif(userNumber==2){
return"小红";
}
else{
return"未知";
}
}
@ResponseBody
@RequestMapping(value="/save",method=RequestMethod.POST)
@ApiOperation(value="新增商品")
publicStringsave(){
GoodsInfogoodsInfo=newGoodsInfo(System.currentTimeMillis(),"商品"+System.currentTimeMillis(),"这是一个测试商品");
goodsRepository.save(goodsInfo);
return"success";
}
@ResponseBody
@RequestMapping(value="/delete",method=RequestMethod.POST)
@ApiOperation(value="删除商品")
@ApiImplicitParam(paramType="query",name="id",value="商品id",required=true,dataType="long")
publicStringdelete(@RequestParam(required=true)longid){
goodsRepository.deleteById(id);
return"success";
}
@ResponseBody
@RequestMapping(value="/update",method=RequestMethod.POST)
@ApiOperation(value="更新商品")
@ApiImplicitParam(paramType="query",name="id",value="商品id",required=true,dataType="long")
publicStringupdate(@RequestParam(required=true)longid,
@RequestParam(required=false)Stringname,
@RequestParam(required=false)Stringdescription){
OptionalgoodsInfo=goodsRepository.findById(id);
if(goodsInfo.isPresent()){
if(name!=null){
goodsInfo.get().setName(name);
}
if(description!=null){
goodsInfo.get().setDescription(description);
}
goodsRepository.save(goodsInfo.get());
return"success";
}else{
return"nofind";
}
}
@ResponseBody
@RequestMapping(value="/getOne",method=RequestMethod.GET)
@ApiOperation(value="得到一个商品")
@ApiImplicitParam(paramType="query",name="id",value="商品id",required=true,dataType="long")
publicOptionalgetOne(@RequestParam(required=true)longid){
OptionalgoodsInfo=goodsRepository.findById(id);
returngoodsInfo;
}
privateSearchQuerygetEntitySearchQuery(intpageNumber,StringsearchContent){
Pageablepageable=PageRequest.of(pageNumber,20);
SearchQuerysearchQuery=newNativeSearchQueryBuilder().withQuery(queryStringQuery(searchContent)).withPageable(pageable).build();
returnsearchQuery;
}
@ResponseBody
@RequestMapping(value="/search",method=RequestMethod.GET)
@ApiOperation(value="搜索商品")
publicListsearch(@RequestParam(required=true)IntegerpageNumber,@RequestParam(required=true)Stringquery){
SearchQuerysearchQuery=getEntitySearchQuery(pageNumber,query);
PagegoodsPage=goodsRepository.search(searchQuery);
returngoodsPage.getContent();
}
} 上述就是小编为大家分享的ElasticSearch怎么在Spring boot中使用了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注恰卡编程网行业资讯频道。
推荐阅读
-
4个理由告诉你Java为何排行第一
本文由码农网 –单劼原创翻译,转载请看清文末的转载要求,欢迎参与我们的付费投稿计划!Java已经有20年的历史了,甚...
-
写给精明Java开发者的测试技巧
我们都会为我们的代码编写测试,不是吗?毫无疑问,我知道这个问题的答案可能会从“当然,但你知道怎样才能避免写测试吗?”到“必须...
-
Java 微服务框架 Redkale 入门介绍
Redkale功能Redkale虽然只有1.xM大小,但是麻雀虽小五脏俱全。既可作为服务器使用,也可当工具包使用。作为独立的工...
-
Java内存管理原理及内存区域详解
一、概述Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干不同的数据区域,这些区域都有各自的用途以及创建和销毁...
-
2015年Java开发岗位面试题归类
下面是我自己收集整理的Java岗位今天面经遇到的面试题,可以用它来好好准备面试。一、Java基础1.String...
-
Java 虚拟机类加载机制和字节码执行引擎
引言我们知道java代码编译后生成的是字节码,那虚拟机是如何加载这些class字节码文件的呢?加载之后又是如何进行方法调用的呢?...
-
Java常量池理解与总结
一.相关概念什么是常量用final修饰的成员变量表示常量,值一旦给定就无法改变!final修饰的变量有三种:静态...
-
Java 实现线程死锁
概述春节的时候去面试了一家公司,笔试题里面有一道是使用简单的代码实现线程的‘死锁’,当时没有想到这道题考的是Sync...
-
Java:过去、未来的互联网编程之王
Java对你而言是什么?一门你大学里学过的语言?一个IT行业的通用语言?你相信Java已经为下一次互联网爆炸做好了准备么?Java...
-
20个高级Java面试题汇总
本文由码农网 –小峰原创翻译,转载请看清文末的转载要求,欢迎参与我们的付费投稿计划!这是一个高级Java面试系列题中...
