SpringBoot集成BBOSS-ElasticSearch实现ElasticSearch客户端

七十九、Springboot 整合 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: 123456
      elasticUser: elastic
      elasticsearch:
        dateFormat: yyyy.MM.dd
        discoverHost: false
        rest:
          hostNames: 127.0.0.1:9200
        scrollBlockedWaitTimeout: 0
        scrollThreadCount: 200
        scrollThreadQueue: 200
        showTemplate: false
        sliceScrollBlockedWaitTimeout: 0
        sliceScrollThreadCount: 100
        sliceScrollThreadQueue: 100
        timeZone: Asia/Shanghai
      http:
        connectionRequestTimeout: 5000
        customHttpRequestRetryHandler: org.frameworkset.spi.remote.http.ConnectionResetHttpRequestRetryHandler
        defaultMaxPerRoute: 200
        hostnameVerifier:
        keepAlive: 3600000
        keyPassword:
        keystore:
        maxHeaderCount: 200
        maxLineLength: -1
        maxTotal: 400
        retryTime: 1
        retryInterval: 1000
        soKeepAlive: false
        soReuseAddress: false
        staleConnectionCheckEnabled: false
        timeToLive: 3600000
        timeoutConnection: 5000
        timeoutSocket: 5000
        validateAfterInactivity: 2000
      dslfile:
        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 block
            e.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为检索操作action
        ESDatas<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

在这里插入图片描述

Spring Boot集成Docker、Redis与Elasticsearch的实践项目 Docker是一种轻量级的虚拟化解决方案,它允许开发者打包应用程序及其依赖包到一个可移植的容器中,这些容器可以在任何支持Docker的系统上运行,保证了”一次编写,到处运行”的便利性。Docker的基本架构包括以下几个核心组件:Docker Daemon(守护进程): 长期运行在主机上,负责管理Docker对象,如镜像、容器、网络、数据卷等。Docker Client(客户端): 用户与Docker交互的命令行界面,通过发送命令来控制守护进程。Docker Images(镜像) 阅读详情

相关推荐

详解在linux上安装vpn客户端

详解在linux上安装vpn客户端

FuncPlotCalc 8427

springboot集成bboss操作elasticsearch索引,类型,文档(单集群)

工作之余想开发一个前后端分离的个人博客系统来熟悉和增加自己的技术栈,想使用elastisearch来做博客的搜索功能,而原生的api操作起来步骤较多,感觉很繁琐。所以最近在找框架,看能不能简化操作,快捷的开发。然后,然后就找到了bboss。 bboss是一套基于query dsl语法操作和访问分布式搜索引擎elasticsearch的o/r mapping高性能开发库,底层基于es restful api。基于bboss elasticsearch,可以快速编写出访问和操作ela...

不经意的博客 4662

Flotherm XT新手必看:5分钟搞定自然对流热仿真(附案例文件)

本文为Flotherm XT新手提供了自然对流热仿真的快速入门指南,通过详细的步骤解析和实用技巧,帮助用户在5分钟内完成从建模到后处理的全流程。重点介绍了环境设置、几何建模、材料属性、网格划分等关键环节,并附有案例文件供参考学习,助力工程师快速掌握热仿真技术。

weixin_30839881的博客 622

springboot整合bboss操作elasticsearch

elaticsearch有很多的java客户端,像transportclient,jestclient,springdata。但是还有一种bboss可以让我们像操作mybatis一样的来操作elasticsearch,并且可以和springboot无缝整合,非常的方便快捷。 1.首先引入依赖。 <dependency> <groupId>com.bbossgroups.plug...

远方的少年 1470

SAP高级外币评估_FINS_FXV_S4 2022 OP

摘要:S/4HANA 2022 On-Premise中的高级外币评估(FINS_FXV)取代了经典外币估值(FAGL_FCV),提供更优化的财务结算功能。主要创新包括:增量发布逻辑、简化账户配置、行项目级估值可见性等。该功能支持IFRS9等会计准则,通过会计原则(Accounting Principle)进行配置,需完成财务报表版本定义、语义标记分配等必要设置。系统演示展示了从汇率维护(FB60/MIRO)、测试运行到最终过账(FB03)的完整流程,能自动计算并过账汇率差异。高级外币评估简化了期末结算操作,

yanzibing99的博客 1260

全球AI算力最强公司分析报告

全球AI算力最强公司分析报告显示,Google凭借自研TPU技术和庞大数据中心网络位居榜首,拥有约100万至150万块等效H100 GPU算力。微软、Meta和亚马逊紧随其后,分别拥有75万、55万和25万块等效H100 GPU。中国企业中,百度、阿里巴巴和腾讯表现突出,华为在国产AI芯片领域领先。技术指标上,NVIDIA H100相比A100性能显著提升,但功耗也大幅增加。未来AI算力需求将持续激增,预计2028年全球市场将超2000亿美元。新兴挑战者如xAI可能改变竞争格局。

MyySophia的博客 5714

注解式elasticsearch+SpringBoot(附分布式配置)

前言:以前使用的是Rest High Level Client客户端,使用起来一大堆的类相互嵌套,特别是agg操作,代码十分惨烈。 架构:使用方式与mybatis类似,采用xml的形式,将dsl与代码分离。示例用了swagger2和lombok。 需知:必须学会DSL语法(看半小时差不多就会了吧)。 依赖: <dependency> <group...

Good Luck 8万+

Imatest-Star模块(西门子星图)

星图分析指南:基于ISO12233标准的MTF测试方法,通过放射状射线和正弦灰度变化评估相机SFR性能。

weixin_64706696的博客 1566

Elasticsearch——Bboss

Elasticsearch——Bboss官网地址mavenes集群整合application.propertiesBBossESStarter操作类功能测试判断索引是否存在 官网地址 https://esdoc.bbossgroups.com/#/ maven <dependency> <groupId>com.bbossgroups.plugins</groupId> <artifactId>bboss-elasticsearch-rest-jdbc

weixin_43303455的博客 3351

Protege入门指南:从下载到本体构建实战

本文是Protege的入门实战指南,详细介绍了如何从官网下载安装这款由斯坦福大学开发的免费本体构建工具,并通过经典的“披萨本体”案例,系统讲解了类、属性、个体和公理四大核心要素。文章还深入解析了Protege的工作界面,并引导读者亲手创建一个简易的“公司人员组织”本体,完成从定义概念、建立关系到逻辑推理的全流程,是知识图谱与本体建模初学者的理想教程。

weixin_29093169的博客 698

实干派!网易易盾增强版滑块验证码,全方位讲解识别思路(含源码)

该验证码是异形滑块验证码中的一种,缺口旋转+偏移的处理需要你有很好的图像处理知识,能很好的处理透明通道,同时,该验证码需要你能很好的处理缺口和背景之间匹配的关系,该验证码的处理难点就是两个缺口之间如何找到正确的,两个检测框都有很强的相似度,且加上背景图的干扰,在图像处理和有优化上难度大大增加。

码王吴彦祖的博客 2015

springboo集成bboss-elasticsearch实现elasticsearch客户端

内容简介 首先说明本文要实现的内容: 1.比较bboss-elasticsearch和springboot自带的spring-boot-starter-data-elasticsearch优缺点 2.如果实现数据库数据全量、增量的导入到elasticsearch服务器中 3.将excel、word、ppt、pdf等文件解析到elasticsearch服务器中 4.通过json文件生生成mappin...

LoveFly826的博客 2318

Qt/C++编写自定义控件49-飞机仪表盘

一、前言 飞行仪表是测定和表示飞机数据的工具,飞机中必不可少的一部分,飞行员根据飞行仪表表示的数据才能正确地做出判断。一般飞机仪表包括高度表+空速表+垂直速率表+姿态仪+航向指示表+转弯协调表。 这次要绘制的是其中的姿势仪,显示飞机相对于地平线的姿态,看姿态仪,飞行员能判断飞机姿态为偏左偏右,及偏上和偏下。姿态仪作用原理为一高度旋转的陀螺,不论飞机的姿态如何变化,此陀螺的定轴性在空间保持相同,因而...

Qt/C++视频监控/推流/物联网/大屏系统/自定义控件/UI定制/输入法 7024

SpringBoot如何整合BBoss Elasticsearch呢

大家一定很熟悉mybatis了,它是一个持久层框架,可以通过简单的XML或注解来配置,映射为数据库中的数据。我们通常是在xml文件中写sql,来操作数据库中的数据。而接下来要讲的bboss elasticsearch就和它类似,大家习惯了之前这个使用mybatis的方式操作数据库了,使用java客户端直接操作elasticsearch会不习惯,所以可以使用bboss来操作elasticsearch。 bboss是一款高性能elasticsearch ORM开发库, 以类似于mybatis管理和配置sql的方

像风走过八千里 1277

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

基于springboot+bboss整合的elasticsearch(好用的一匹)

正经学徒,佛系记录,不搞事情 一、什么是BBOSS 官方解释:bboss是一个j2ee开源框架,为企业级应用开发提供一站式解决方案,并能有效地支撑移动应用开发。bboss功能涵盖ioc,mvc,jsp自定义标签库,restful,http,rpc,持久层,全局事务托管;安全认证;SSO;web会话共享;cxfwebservice服务发布和管理;hessian服务发布和管理;bboss elas...

toBeMN的博客 1万+

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

SpringBoot集成Elasticsearch客户端(新旧版本)(2023-01-28)

例如:业务中需要使用es,所以做一些客户端选型,熟悉一下基本的操作,所以记录这篇博客,有关概念理论性的文章还在整理过程中,后续会整理个系列maven中央仓库中的elasticsearch-java相关版本从7.15.0版本(beta版本)开始,[application/vnd.elasticsearch+json; compatible-with=7] is not supported","status":406 [es/search] Missing [X-Elastic-Product] header

qq_40662424的博客 4694

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Elasticsearch Rest Client bboss v5.6.6 发布

The best Elasticsearch HighlevelRest Client API-----bbossv5.6.6 发布。 bboss elasticsear...

weixin_34250709的博客 183

【Elasticsearch学习笔记五】es常用的JAVA API、es整合SpringBoot项目中使用、利用JAVA代码操作es、RestHighLevelClient客户端对象

Elasticsearch软件是由 Java 语言开发的,所以也可以通过 Java API 的方式对 Elasticsearch服务进行访问;Maven项目集成Easticsearch;springboot项目集成Spring Data操作Elasticsearch;springboot项目集成bboss操作elasticsearch;1)客户端对象2)索引操作3)文档操作4)高级查询;getConfigRestClientUtil和getRestClientUtil区别;

一个学习Java开发的老头 1664

SpringBoot整合Elasticsearch BBoss

依赖增加: <dependency> <groupId>com.bbossgroups.plugins</groupId> <artifactId>bboss-elasticsearch-rest-jdbc</artifactId> <version>6.2.8</version> </dependency> <dependency> <groupId>

zhangzhw_zzw的博客 766

Elasticsearch Rest Client bboss v5.5.8 发布

百度智能云 云生态狂欢季 热门云产品1折起>>> The best Elasticsearch Hi...

weixin_34245749的博客 109

基于Bboss快速构建高效、可靠、安全的Elasticserach全文检索以及统计分析应用

Bboss后端基于Gradle模块化构建,灵活便捷。框架模块丰富,涵盖数据同步ETL工具、J2ee开发框架、微服务、数据库、中间件、安全、配置、缓存、国际化、elasticsearch client、web session共享、redis、kafka、mongodb工具包等常用模块,最大程度满足开发需要。同时,严格遵守WEB安全规范,从根本上避免SQL注入、XSS攻击、CSRF攻击等常见的 Web 攻击手段。支持主流的分布式微服务架构,快速构建高可用服务集群。

weixin_40381772的博客 3489

Elasticsearch Rest Client bboss v5.5.6 发布

The best Elasticsearch HighlevelRest Client API-----bbossv5.5.6 发布。 主要功能特色 E...

weixin_34367257的博客 149
上一篇: 阿里云Docker安装ES\ES_Head\安装部署logstash导mysql数据入ElasticSearch
下一篇: EasyExcel学习笔记
智汇风渔AI小白
博客等级 码龄7年 1万+粉丝 179原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智汇风渔AI小白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值