热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

es(elasticsearch)整合SpringCloud(SpringBoot)搭建教程详解

这篇文章主要介绍了es(elasticsearch)整合SpringCloud(SpringBoot)搭建教程,本文通过实例图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

注意:适用于springboot或者springcloud框架

1.首先下载相关文件
2.然后需要去启动相关的启动文件

请添加图片描述
请添加图片描述

3、导入相关jar包(如果有相关的依赖包不需要导入)以及配置配置文件,并且写一个dao接口继承一个类,在启动类上标注地址


 org.projectlombok
 lombok



 org.springframework.boot
 spring-boot-starter-web



 org.springframework.boot
 spring-boot-starter-data-elasticsearch
## ElasticSearch - start
#开启 Elasticsearch 仓库(默认值:true)
spring.data.elasticsearch.repositories.enabled=true
spring.data.elasticsearch.cluster-nodes=localhost:9300
spring.data.elasticsearch.cluster-name=myes

Shop:是下面创建的实体类名称(不能写错),String(传参时的类型,我这里id也给的String,因为integer报错)

import com.jk.user.model.Shop;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
public interface EsDao extends ElasticsearchRepository {
}

启动类上加上注解,后面跟的是dao的包名

@EnableElasticsearchRepositories(basePackages = "com.jk.web.dao")

4.实体类
indexName相当于数据库名, type 相当于表名 ,必须加上id,type 类型,analyzer 分词器名称(ik分词)

@Document(indexName = "zth",type = "t_shangpin")
public class Shop implements Serializable {
 private static final long serialVersiOnUID= 2006762641515872124L;

 private String id;

 @Field(type = FieldType.Text, analyzer = "ik_max_word")
 //商品名称
 private String shopname;

 //优惠价格
 private Long reducedprice;
}

5.然后写controller层(这里直接注入dao接口),这里新增我选的是对象循环赋值,其实可以直接赋集合(参考)

//elasticsearch 生成表
 // @RequestMapping("el")
 // @ResponseBody
 // public void el(){

 // List list=shoppService.queryelasticsearch();
 // for (ElasticsearchBean ss: list) {
 //  ss.setScrenicName(ss.getScrenicName()+""+ss.getHotelName());
 // }
 // elasticsearch.saveAll(list);

 // }
@Autowired
private EsDao esDao;
// 查询时需要
@Autowired
private ElasticsearchTemplate elasticsearchTemplate ;

//更新es服务器数据
@RequestMapping("addEs")
public boolean addShopEs() {
 List list = webUserService.queryShouye();//先去后台查出数据在赋值
 Shop shop = new Shop();
 try {
 for (int i = 0; i  resultMap = new HashMap<>();
 //创建一个要搜索的索引库
 SearchRequestBuilder searchRequestBuilder = elasticsearchTemplate.getClient().prepareSearch("zth").setTypes("t_shangpin");


 //创建组合查询
 BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder();

 if (name!=null && !"".equals(name)){
 boolQueryBuilder.should(QueryBuilders.matchQuery("shopname",name));
 }
 //设置查询的类型
 searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH);
 searchRequestBuilder.setQuery(boolQueryBuilder);

 //分页
 searchRequestBuilder.setFrom((page-1)*rows);
 searchRequestBuilder.setSize(rows);
 //设置高亮字段
 HighlightBuilder highlightBuilder = new HighlightBuilder();
 highlightBuilder.field("shopname")
  .preTags("")
  .postTags("");
 searchRequestBuilder.highlighter(highlightBuilder);

 //直接搜索返回响应数据 (json)
 SearchResponse searchRespOnse= searchRequestBuilder.get();
 SearchHits hits = searchResponse.getHits();
 //获取总条数
 long totalHits = hits.getTotalHits();
 resultMap.put("total",totalHits);

 ArrayList> list = new ArrayList<>();
 //获取Hits中json对象数据
 SearchHit[] hits1 = hits.getHits();
 for (int i=0;i sourceAsMap = hits1[i].getSourceAsMap();
 //获取高亮字段
 Map highlightFields = hits1[i].getHighlightFields();
 //!!如果有高亮字段就取出赋给上面sourceAsMap中原有的名字给他替换掉!!
 if (name!=null && !"".equals(name)){
  sourceAsMap.put("shopname",highlightFields.get("shopname").getFragments()[0].toString());
 }
 list.add(sourceAsMap);
 }

 return list;

}

6.最后 如果无法搜索,可能是需要加一个ik的json文件,因为在实体类中规定了是ik分词器,如果不规定当它存进去后其实是还没有分词。

film-mapping.json

{ 
"film": 
{ 
"_all":
{
"enabled": true 
},
"properties":
{ "id": 
{ 
"type": "integer"
},"name":
{
"type": "text", "analyzer": "ikSearchAnalyzer", "search_analyzer": "ikSearchAnalyzer", "fields":
{ "pinyin": { 
"type": "text", "analyzer": "pinyinSimpleIndexAnalyzer", "search_analyzer": "pinyinSimpleIndexAnalyzer" 
} } },
"nameOri": { "type": "text" 
},"publishDate": 
{ "type": "text" },"type": 
{ "type": "text"
},"language": 
{ "type": "text" 
},"fileDuration":
{ "type": "text" 
},"director":
{ "type": "text",
 "index": "true", "analyzer": "ikSearchAnalyzer"
 },"created": 
 {
 "type": "date", "format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis" 
 } } } }

film-setting.json

在这里插入图片描述

{ "index": { "analysis": 
{ "filter":
{ "edge_ngram_filter": 
{ "type": "edge_ngram", "min_gram": 1, "max_gram": 50 
},"pinyin_simple_filter": 
{
 "type": "pinyin", "first_letter": "prefix", "padding_char": " ", "limit_first_letter_length": 50, "lowercase": true
 } 
},"char_filter": 
 { 
"tsconvert": { "type": "stconvert", "convert_type": "t2s" 
 } 
},"analyzer":
 { "ikSearchAnalyzer": 
 { "type": "custom", "tokenizer": "ik_max_word", "char_filter": [ "tsconvert" ]
 },"pinyinSimpleIndexAnalyzer": 
 { "tokenizer": "keyword", "filter": [ "pinyin_simple_filter", "edge_ngram_filter", "lowercase" ] 
 } } } } }

在这里插入图片描述

总结

到此这篇关于es(elasticsearch)整合SpringCloud(SpringBoot)搭建教程详解的文章就介绍到这了,更多相关elasticsearch 整合SpringCloud内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!


推荐阅读
  • 探讨密码安全的重要性
    近期,多家知名网站如CSDN、人人网、多玩、开心网等的数据库相继被泄露,其中大量用户的账户密码因明文存储而暴露无遗。本文将探讨黑客获取密码的常见手段,网站如何安全存储用户信息,以及用户应如何保护自己的密码。 ... [详细]
  • 本文介绍了 PHP 的基本概念、服务器与客户端的工作原理,以及 PHP 如何与数据库交互。同时,还涵盖了常见的数据库操作和安全性问题。 ... [详细]
  • ABP框架是ASP.NET Boilerplate的简称,它不仅是一个开源且文档丰富的应用程序框架,还提供了一套基于领域驱动设计(DDD)的最佳实践架构模型。本文将详细介绍ABP框架的特点、项目结构及其在Web API优先架构中的应用。 ... [详细]
  • 近期遇到了一个系统中在线文本编辑器上传本地图片时报服务器异常的问题。经过初步调试和排查,最终找到了解决方案。 ... [详细]
  • Cookie学习小结
    Cookie学习小结 ... [详细]
  • 本文深入解析了 Kubernetes 控制平面(特别是 API 服务器)与集群节点之间的通信机制,并对其通信路径进行了详细分类。旨在帮助用户更好地理解和定制其安装配置,从而增强网络安全性,确保集群的稳定运行。 ... [详细]
  • 如题:2017年10月分析:还记得在没有智能手机的年代大概就是12年前吧,手机上都会有WAP浏览器。当时没接触网络原理,也不 ... [详细]
  • 本文介绍了GitHub上的一些Python开源项目,特别是IM(即时通讯)技术的应用。通过Sealtalk项目,探讨了如何利用开源SDK提升开发效率。 ... [详细]
  • NPM 脚本 'start' 退出,未显示 create-react-app 服务器正在监听请求
    遇到 NPM 脚本 'start' 退出且未显示 create-react-app 服务器正在监听请求的问题,请求帮助。 ... [详细]
  • 文章目录python包-requests关于requests包安装和使用pythonrequests请求超时设置工作中遇到的常见问题整理访问https网站,报错cer ... [详细]
  • Spring Boot + RabbitMQ 消息确认机制详解
    本文详细介绍如何在 Spring Boot 项目中使用 RabbitMQ 的消息确认机制,包括消息发送确认和消息接收确认,帮助开发者解决在实际操作中可能遇到的问题。 ... [详细]
  • 本文探讨了为何产品团队提出的某些需求在研发完成后未能获得用户的认可,并提供了改进方法。主要分析了功能不完整或存在bug以及用户体验不佳的原因。 ... [详细]
  • 说明Python教程正在编写中,欢迎大家加微信sinbam提供意见、建议、纠错、催更。drymail是一个邮件发送库,封装了Python的smtplib ... [详细]
  • Spring 中 Bean 信息定义的三种方法探讨
    本文详细探讨了 Spring 框架中实现 Bean 信息定义的三种方法:基于 XML 配置、基于注解配置和基于 Java 类配置。每种方法都有其适用场景和优缺点。 ... [详细]
  • 使用虚拟机配置服务器
    本文详细介绍了如何使用虚拟机配置服务器,包括购买云服务器的操作步骤、系统默认配置以及相关注意事项。通过这些步骤,您可以高效地配置和管理您的服务器。 ... [详细]
author-avatar
小晶晶妮妮宝贝
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有