[ES三周年]Springboot 实现 ES-SQL 的流程-焦点消息
记录一个最近半年犯了两次的低级编码错误,校验某个字符串信息为枚举类的某实例时,写成了:枚举类的实例 equals(字符串),结果总是false,打
记录一个最近半年犯了两次的低级编码错误,校验某个字符串信息为枚举类的某实例时,写成了:枚举类的实例.equals(字符串)
,结果总是 false
,打印信息貌似正确,实际执行结果总是不达预期,仔细看看代码才发现问题。本文记录本周开发工作中遇到的几个小问题,Bug 是无法完全消除的,只能尽量减少。
查看某进程的端口占用时,看到好多正连接着的 ES 连接对象,普通的 Java Web 应用,没有后台任务,怎么会保持这么多连接呢?
(资料图片)
问题分析:代码有缺陷,有些请求使用 ES 进行数据查询完成后,没有关闭 ES 连接对象。ES 连接不关闭,有什么问题呢?
Linux 的每个连接都会创建一个文件句柄,毫无疑问,Socket 连接用完后不关闭,会导致端口资源泄漏。
在将 ElasticSearch 的 Response
对象序列化时碰到一个异常信息:
Caused by: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class org.elasticsearch.common.text.Text and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain: org.elasticsearch.action.search.SearchResponse["hits"]->org.elasticsearch.search.SearchHits["hits"]->org.elasticsearch.search.SearchHit[0]->org.elasticsearch.search.SearchHit["shard"]->org.elasticsearch.search.SearchShardTarget["nodeIdText"])
有两种解决办法:
定义一个配置类,设置 jackson 的序列化配置属性。通过 SpringBoot 的全局配置spring.jackson.serialization.FAIL_ON_EMPTY_BEANS
设置为 false ,该配置默认为 true ,这个方式更方便。回到文章标题说的问题,ElasticSearch 6 以后的版本支持 SQL 语句检索了,如何用 Java 代码实现 ES SQL 检索呢?
第一 Part,基础知识。先搞明白需求及相关的技术支持,主要如下:
ElasticSearch-SQL 功能,区分 GitHub 上的一个插件和 ElasticSearch 自身的支持能力。ES 6 以后内置了X-Pack 组件,提供了 Elasticsearch SQL 能力,就是说不用安装插件就可以使用 ES SQL 能力了。而网上很多都是介绍 ElasticSearch SQL 插件安装的,却不曾想 ES 已经内置了。ES 6 与 ES 8 的 Rest API 的语法不一样,8 以上的版本语句是/_xpack/_sql?format=
,但是旧版本是 /_xpack/sql?format=
,版本依赖问题有时候挺坑的。网上大量的资料,估计都是来自官网,全都是 /_xpack/_sql?format=
,结果我测试用的环境是 ES6 的,一直报错。第二 Part,Java 实现 ES-SQL 操作的几种方法:
Rest API 请求/_xpack/sql?format=
。JDBC-ES ,这个功能是收费的。确定方案一。
第三 Part,使用 elasticsearch-rest-high-level-client
包的 RestAPI 客户端工具可以实现 ES-SQL 的操作。基本思路是构建一个 RestClient 对象,请求路径为 /_xpack/_sql?format=json
这个用 txt 的时候,总是得不到结果,用 json 就没问题。
重要源代码如下:
// ES 连接信息构造RestClientBuilder restClientBuilder = null;if (hasPwd) {final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();/** 设置 ES 认证信息 */ credentialsProvider.setCredentials(AuthScope.ANY,new UsernamePasswordCredentials(userName, password));restClientBuilder = RestClient.builder(https) .setHttpClientConfigCallback(httpAsyncClientBuilder -> httpAsyncClientBuilder.setDefaultCredentialsProvider(credentialsProvider));} else { restClientBuilder = RestClient.builder(https)}// xpack-sql 请求构造String searchIndex = "/_xpack/sql?format=json";Request request = new Request("POST", searchIndex);request.setJsonEntity(queryJsonString);RestClient restClient = restClientBuilder.build();try { Response response = restClient.performRequest(request); String body = EntityUtils.toString(response.getEntity()); // TODO 处理 ES 响应结果} catch (IOException e) {}
电脑一直占据大量的 CPU,top 看是 ToDesk 进程,执行下面的操作好了:
sudo launchctl unload /Library/LaunchDaemons/com.youqu.todesk.service.plist复制代码
我碰到的问题,绝对不是个例,百度是个好东西,面向百度编程也没什么不好啊!
如何用 Java 实现 ES-SQL 检索流程呢?《ES SQL 检索的 Java 实现流程》,该文给的启示是直接用 Rest API 方式访问 _xpack/sql
,那就是简单了底层就是 URLConnection
。
而 ES 自身有 RestHighLevelClient 等一些列的 API,怎么用它来实现 _xpack/sql
请求呢?自己用 RestTemplate 实现倒是可以,问题是如果 ES 有认证怎么办呢?
《java 连接带认证的 elasticsearch》 这篇文章又给了我启示,用 RestClient
连接 ES 访问特定的 URL 完成。
关键词:
[ 相关文章 ]
记录一个最近半年犯了两次的低级编码错误,校验某个字符串信息为枚举类的某实例时,写成了:枚举类的实例 equals(字符串),结果总是false,打
龙佰集团(002601)03月12日在投资者关系平台上答复了投资者关心的问题。投资者:贵公司作为高新技术企业,是否在6G方面有布局!龙佰集团董秘:
夏弥来为大家解答以下的问题,秀色,说一说秀色的简介,现在让我们一起来看看吧!1、秀色是一种比喻,就是形容人或者事物的美丽
欧洲能源危机不仅为核电复苏提供了可能,同时欧盟外的核电企业也在积极谋求进入欧盟市场。 俄乌冲突前,核电在欧洲的发展并不受到重视,欧
1、杭州艾斯凯尔科技有限公司于2017年11月15日成立。2、法定代表人王孟庠,公司经营范围包括:计算机软硬件和医学技术的技术开发、技术咨询、
全篇对2012的评价只有一句“显然是不再值得一看”我就请问你不喜欢看你为什么还要来看呢?后面就开始扯别的说什么别人看的太低端自己看的有多么
1、玩私服其实很没意思的,还是怀念以前玩正版那会的感觉 现在还玩传奇,无法都是老玩家找下感觉的,说实话变态服
1、苏烟在江苏地区零售价在45-48元 包。2、你在北京收一条的话价格估计在420元左右。本文分享完毕,希望对大家有所帮
1、关系式:tan=sin cos(cos)。正弦,数学术语,在直角三角形中,任意锐角A的对边与斜边之比称为A的正弦,称
1、观秋(拼音:mngchqihao)原意是指视力好到可以识别秋天的飞禽走兽的细毛(明:视力敏锐)。查:你看。秋天:
3月8日,科幻惊悚片《逃出白垩纪》在中国内地定档,并发布定档预告!在危机四伏的史前地球上,两位未来幸存者携手前行。《逃出白垩纪》由史考
1、《怨天怨地》的音乐风格和想要表达的意思,每一个细节都将真实的自我一面彻底袒露。2、简单、不刻意修饰的歌词和干净的音色
1、野的像风2、清歌不尽3、抹茶落季4、尛糖惢oоΟ5、清酒与你6、小鲜肉7、-上瘾入骨i8、慢半拍i9、段念﹍尘10、
1、痔疮是可以不用手术治疗的,但是药物保守治疗只适合轻度的痔疮,而且还有可能会复发,您可以先去医院做个专科检查看一下,您
1、四连刻所胡牌中含有同花色且牌点数相连的4组刻子或杠子的牌形。2、四杠子(十八罗汉)所胡牌中含有4组杠子的牌形,
1、可转换债券和股票一样,属于公司的融资方式。如果上市公司发行可转换债券,则表明公司急需资金,通常需要进行新项目。因此,发行可转换债券
1、山东赫赫影视文化传媒有限公司于2003年08月28日成立。2、法定代表人赫安峰,公司经营范围包括:广播电视节目制
1、《一生有你》填词:卢庚戌谱曲:卢庚戌歌曲原唱:水木年华因为梦见你离开,我从哭泣中醒来看夜风吹过窗台,你能否感
智通财经获悉,3月9日,微盟集团(02013)宣布正式成为百度文心一言生态合作伙伴。文心一言的技术能力将与微盟SaaS产品和数字营销服务实现深度融
1、你的心情总在飞什么事都要去追想抓住一点安慰你总是喜欢在人群中徘徊你最害怕孤单的滋味你的心那么脆,一碰就会碎经不起一点风吹你的身边总
[ 相关新闻 ]
Copyright 2015-2022 欧洲医院网 版权所有 备案号:沪ICP备2022005074号-23 联系邮箱: 58 55 97 3@qq.com