SpringBoot集成BBOSS-ElasticSearch实现ElasticSearch客户端
一、BBOSS-ElasticSearch
二、通过freeMarker创建索引库、创建索引
2.1maven
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId><exclusions><exclusion><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId></exclusion></exclusions>
</dependency>
<dependency><groupId>com.bbossgroups.plugins</groupId><artifactId>bboss-elasticsearch-rest-jdbc</artifactId><version>6.5.6</version><exclusions><exclusion><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId></exclusion></exclusions>
</dependency>
<dependency><groupId>com.bbossgroups.plugins</groupId><artifactId>bboss-elasticsearch-spring-boot-starter</artifactId><version>6.5.6</version><exclusions><exclusion><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId></exclusion></exclusions>
</dependency>
<dependency><groupId>org.xerial</groupId><artifactId>sqlite-jdbc</artifactId><version>3.23.1</version><scope>compile</scope>
</dependency>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId>
</dependency>
2.2application.yml
spring:elasticsearch:bboss:elasticPassword: 123456elasticUser: elasticelasticsearch:dateFormat: yyyy.MM.dddiscoverHost: falserest:hostNames: 127.0.0.1:9200scrollBlockedWaitTimeout: 0scrollThreadCount: 200scrollThreadQueue: 200showTemplate: falsesliceScrollBlockedWaitTimeout: 0sliceScrollThreadCount: 100sliceScrollThreadQueue: 100timeZone: Asia/Shanghaihttp:connectionRequestTimeout: 5000customHttpRequestRetryHandler: org.frameworkset.spi.remote.http.ConnectionResetHttpRequestRetryHandlerdefaultMaxPerRoute: 200hostnameVerifier:keepAlive: 3600000keyPassword:keystore:maxHeaderCount: 200maxLineLength: -1maxTotal: 400retryTime: 1retryInterval: 1000soKeepAlive: falsesoReuseAddress: falsestaleConnectionCheckEnabled: falsetimeToLive: 3600000timeoutConnection: 5000timeoutSocket: 5000validateAfterInactivity: 2000dslfile:refreshInterval: -1
2.3接口方法
@RequestMapping(value="/createEsIndexMapping",method = RequestMethod.POST)public String createEsIndexMapping(@RequestBody CmIndexes cmIndexes) throws Exception {String str = "";//1、第一步使用freeMarker生成xml文件String cmIndex = esUtils.createXml(cmIndexes);//2、第二步创建ES索引String mapping = createIndiceMapping(cmIndexes);//判断是否存在if("1".equals(mapping)){str = "索引库已经存在!!!";return str;}return cmIndex;}
2.4freeMarker生成xml文件
public String createXml(CmIndexes cmIndexes) throws IOException {Writer w = null;String str = "";try {//1、获取xmlTemplate文件夹的当前路径URL url = Thread.currentThread().getContextClassLoader().getResource("templates");String path = url.getPath();Configuration configuration = new Configuration();configuration.setDefaultEncoding("utf-8");//解决写入到xml文件出现乱码问题configuration.setDirectoryForTemplateLoading(new File(path));//2、获取到freeMarker模板Template template = configuration.getTemplate("es.ftl","utf-8");Map<String, Object> responseMap = new HashMap<String, Object>();//3、获取索引库字段类型List<CmField> fieldList = cmIndexes.getFieldList();//获取到映射配置文件responseMap.put("esMappings",fieldList);//设置responseMap.put("mappingName",cmIndexes.getIndexesMappingName());//设置映射名称responseMap.put("indexName",cmIndexes.getIndexesName());//设置索引名称str = route+cmIndexes.getIndexesName()+".xml";File file = new File(str);FileOutputStream f = new FileOutputStream(file);w = new OutputStreamWriter(f,"utf-8");template.process(responseMap, w);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();return "文件创建失败";}finally{w.close();}return "创建成功";}
2.5freeMarker模板【需要根据实际手动配置模板】
<?xml version="1.0" encoding="UTF-8"?>
<properties><!--Demo indice mapping structure--><property name="${mappingName}"><![CDATA[{"settings": {"number_of_shards": 6,"index.refresh_interval": "5s"},"mappings": {"properties": {<#list esMappings as esMapping>"${esMapping.fieldName}":{"type":"${esMapping.indexesFieldType}"<#if esMapping.isDate == 1>,"format":"yyyy-MM-dd HH:mm:ss.SSS||yyyy-MM-dd'T'HH:mm:ss.SSS||yyyy-MM-dd HH:mm:ss||epoch_millis"</#if>}<#if esMapping_has_next>,</#if></#list>}}}]]></property><property name="testHighlightSearch"><![CDATA[{"query": {"bool": {"must": [## 全文检索参考文档 https://www.elastic.co/guide/en/elasticsearch/reference/6.2/full-text-queries.html<#list esMappings as esMapping>#if($${esMapping.fieldName} && !$${esMapping.fieldName}.equals(""))<#if esMapping.isDate == 1>{## 时间范围检索,返回对应时间范围内的记录,接受long型的值"range": {"${esMapping.fieldName}":{"gte": #[startTime],##统计开始时间"lt": #[endTime], ##统计截止时间}}},</#if><#if esMapping.isDate == 2>{"match" : {"${esMapping.fieldName}":{"query":#[${esMapping.fieldName}],"operator": "and"}}},</#if>#end</#list>{"match_all": {}}]}},## 分页起点"from":#[from],## 最多返回size条记录"size":#[size]}]]></property>
</properties>
2.6创建ES索引
public String createIndiceMapping(CmIndexes cmIndexes){String str = "";//1、创建es客户端对象ClientInterface clientUtil = ElasticSearchHelper.getConfigRestClientUtil("./esmapper/"+cmIndexes.getIndexesName()+".xml");//2、查询该索引是否存在boolean exist = clientUtil.existIndice(cmIndexes.getIndexesName());//3、如果存在,则删除索引表if (exist){str = "1";return str;}//4、不存在,则创建索引str = clientUtil.createIndiceMapping(cmIndexes.getIndexesName(), cmIndexes.getIndexesMappingName());return str;}
三、删除索引以及freeMarker文件
@RequestMapping(value="/deleteEsIndex",method = RequestMethod.POST)public String deleteEsIndex(@RequestParam String indexName){ClientInterface clientUtil = ElasticSearchHelper.getRestClientUtil();try {//1、删除索引//删除索引表String indice = clientUtil.dropIndice(indexName);//删除上一步创建的ftl文件 route是在pom.xml里面设置的路径String fileUrl = route+indexName+".xml";File file = new File(fileUrl);boolean delete = file.delete();if(delete == false){return "删除失败";}}catch (Exception e){e.printStackTrace();}return "删除成功";}
3.1单个删除
ClientInterface clientUtil = ElasticSearchHelper.getRestClientUtil();
clientUtil.deleteDocument("索引名称","文档类型","id");
3.2新增更新
clientUtil.addDocument("索引名称",“内容”);
clientUtil.addDocumentWithId("索引名称","文档类型","内容","内容id");
四、ES查询
4.1首先前端传JSON参数
4.2后端接口进行查询
@RequestMapping(value="/selectEsIndex",method = RequestMethod.POST)public List<Object> selectEsIndex(String indexName,String params) throws Exception {Map map = (Map)JSONObject.parse(params);ClientInterface clientUtil = ElasticSearchHelper.getConfigRestClientUtil("esmapper/"+indexName+".xml");//初始化一个加载sql配置文件的es客户端接口//执行查询,demo为索引表,_search为检索操作actionESDatas<Object> esDatas = //ESDatas包含当前检索的记录集合,最多1000条记录,由dsl中的size属性指定clientUtil.searchList(indexName+"/_search",//demo为索引表,_search为检索操作action"testHighlightSearch",//esmapper/demo.xml中定义的dsl语句map,//变量参数Object.class);//返回的文档封装对象类型System.out.println(esDatas.getDatas());return esDatas.getDatas();}
此次难点:1、传值类型是否正确;2、freeMarker模板查询配置是否正确;
ElasticSearch入门学习笔记(一)概念篇
ElasticSearch入门学习笔记(二)软件安装篇
ElasticSearch入门学习笔记(三)SpringBoot整合篇
阿里云Docker安装ES\ES_Head\安装部署logstash导mysql数据入ElasticSearch
SpringBoot集成BBOSS-ElasticSearch实现ElasticSearch客户端相关推荐
- springboot集成bboss操作elasticsearch索引,类型,文档(单集群)
bboss是一套基于query dsl语法操作和访问分布式搜索引擎elasticsearch的o/r mapping高性能开发库,底层基于es restful api.基于bboss elastics ...
- springboot集成websocket(一)客户端、客户端断线重连、客户端连接验证
springboot集成websocket客户端 一.首先是导入依赖包 1.在pom.xml中加入下述即可 <!--websocket作为客户端 --><dependency> ...
- SpringBoot集成Cache缓存(Redis缓存,RedisTemplate方式)
1.说明 SpringBoot集成Redis缓存, 首先创建一个Spring Boot工程, 使用Maven向导方式创建:SpringBoot集成Maven工程 然后引入redis的spring bo ...
- Redis集成到Maven工程(Jedis客户端)
1.说明 Redis不仅可以使用命令行操作, 也支持大部分主流编程语言的客户端, 本文介绍Java客户端Jedis的使用, Jedis API提供了完整的Redis命令, 能够和Redis命令行一一对 ...
- SpringBoot集成Cache缓存(Ehcache缓存框架,注解方式)
1.说明 Spring定义了CacheManager和Cache接口, 用来统一不同的缓存技术, 例如JCache,EhCache,Hazelcast,Guava,Redis等. 本文通过Spring ...
- SpringBoot集成Maven工程
1.说明 通过Maven向导创建一个Maven Project, 而非Spring Boot向导创建Spring Starter Project, 然后通过手工修改的方式, 使这个Maven工程支持S ...
- 【SpringBoot集成ElasticSearch 01】2️⃣ 种方式的高级客户端 RestHighLevelClient 使用(依赖+配置+客户端API测试源码)
1.方式一 1.1 依赖 [不使用 spring-boot-starter-data-elasticsearch 就可以脱离 springboot 版本的限制,可以自行选择ES的版本]我用的是 spr ...
- elasticsearch集群搭建及springboot集成使用
elasticsearch集群搭建及springboot集成使用 1. ES介绍 2. 原理 2.1 核心概念 2.2 索引功能 2.3 ES特性 3. 分词器(analyzer) 4. 集群搭建 4 ...
- ES入门学习:ElasticSearch、Kibana、ik分词器的安装、简单使用及SpringBoot集成
前言 es是采用Java语言开发,因此,想要安装运行es需要提前准备好jdk环境,关于linux配置jdk在前文linux配置jdk 本文主要介绍es的安装.kibana的安装和简单使用及ik分词器的 ...
- 【SpringBoot高级篇】SpringBoot集成Elasticsearch搜索引擎
[SpringBoot高级篇]SpringBoot集成Elasticsearch搜索引擎 1. 什么是Elasticsearch? 2. 安装并运行Elasticsearch 2.1 拉取镜像 2.2 ...
最新文章
- WPF 自定义列表筛选 自定义TreeView模板 自定义ListBox模板
- jQuery HTML 添加和删除元素
- 今天来个爪哇去边框的小代码
- 如何用 C++ 在 10 行内写出八皇后?
- Ngrx Store实现源代码的MemoizedSelector学习笔记
- 排他网关(ExclusiveGateWay)
- 盘点那些让程序员目瞪口呆的Bug都有什么?
- MIP 2016年终总结
- mysql 配置多个数据库连接_SpringBoot多数据库连接(mysql+oracle)
- lisp用entmake生产圆柱体_铝型材挤压生产金属流动与模具分析
- 中国条码解码器市场趋势报告、技术动态创新及市场预测
- http get和post的区别
- WPF界面设计中常用的一些代码片段及属性
- python入门笔记
- 计算机桌面通过网络在拼接屏上显示,一种多个拼接屏实时同步显示方法与流程...
- cad修改快捷键_人手一份的绘图命令,CAD绘图必备,学会工资上万不是梦
- 3种CSS3实现的网页过度效果代码,可独立用于网页设计展示
- 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...
- 《一本书读懂财报》:系统的输入与输出的体现
- 既然有MySQL了,为什么还要有MongoDB?
热门文章
- 怎么实现EDIUS中“老电影”特效的制作
- java.lang.RuntimeException: com.google.inject.CreationException: Unable to create injector异常
- 早餐经常喝大米粥,养胃吗?应该抛弃的三种早餐,很多人却爱吃
- Android加载预览PDF文件
- 《三体》中的经典名句
- 心态-《好奇心》书中的精髓:保持好奇心,能让我们的学习和生活更精彩。
- 【软件需求工程与建模】13组组队项目小组分工及当前完成的工作
- java 对接中国银联 云闪付
- 6、信息隐藏技术:空域下的信息隐藏
- 自识别标记(self-identifying marker) -(2) 用于相机标定的CALTag介绍