一步到位,用SQL检索ElasticSearch
在介绍MOQL的上一篇文章《SQL to ElasticSearch DSL》里,提到了如何将SQL语法转换为ElasticSearch DSL的用法。这期间还出现乌龙事件,就是最新的代码并未提交到GitHub上,功能用不了,如今已经连同本次支持的内容全部更新提交。
上次介绍,MOQL支持在一定的语法集合范围内将SQL语法转换为ElasticSearch的DSL。但这个转换带来的易用性还不够。因为ElasticSearch的Java API不支持直接使用DSL直接查询,而ElasticSearch的HTTP API虽然支持直接使用DSL进行查询,但返回结果为json格式,还需要进行解析,且Query与Aggs的返回结果结构不同,需要一一进行解析,相当的繁琐。为使对ElasticSearch的访问更加方便,目前MOQL又添加了可以直接通过SQL调用就能获得访问结果的数据查询器EsDataQuerier。示例代码如下:
EsDataQuerier dataQuerier = new EsDataQuerier();
String[] serverIps = new String[] {"127.0.0.1"}; Properties properties = new Properties();//properties.put(EsDataQuerier.HTTP_PORT, 9200);
//创建到ES服务器的连接dataQuerier.connect(serverIps, properties);
String sql = "select ip.fw, ip.pri, ip.recorder, ip.proto from ip3 ip where ip.pri = 6 order by ip.src LIMIT 1000";try {//用指定sql语句访问ES服务,返回查询结果RecordSet recordSet = dataQuerier.query(sql);outputRecordSet(recordSet);} catch (IOException e) {e.printStackTrace();}
RecordSet为一个类似与ResultSet的对象,用于存放结果集。其中,outputRecordSet方法的实现如下,可以简单看出RecordSet对象的结构。
void outputRecordSet(RecordSet recordSet) {//recordSet的列头结构描述RecordSetDefinition recordSetDefinition = recordSet.getRecordSetDefinition();StringBuffer sbuf = new StringBuffer();//打印结果集列头for (ColumnDefinition column : recordSetDefinition.getColumns()) {sbuf.append(column.getName());sbuf.append(" ");}System.out.println(sbuf.toString());//输出结果集,结果集是一个数组的集合。集合的长度为结果集长度。每个数组为一条记录。for (Object[] record : recordSet.getRecords()) {StringBuffer sb = new StringBuffer();for (int i = 0; i < record.length; i++) {if (record[i] != null) {sb.append(record[i].toString());} else {sb.append("NULL");}sb.append(" ");}System.out.println(sb.toString());}System.out.println("------------------------------------------------");
}
一步到位,用SQL检索ElasticSearch相关推荐
- SQL to ElasticSearch DSL改进
最近团队在使用MOQL的SQL到ElasticSearch DSL转换时提出,该转换器不能完成深度分页场景的应用.而ElasticSearch为该类应用提供了"search_after&qu ...
- sql 列求和_Excel VBA高级编程SQL检索(二)合并相同项并求和
上一篇我们已经试过用Excel 自带的索引完成了一次SQL检索的操作,今天小编带你用VBA实现SQL检索,并实现相同项求和的功能 SELECT 字段名1,SUM(字段名2) FROM [原始数据$]) ...
- SQL检索MongoDB的轻量级解决方案
关于使用SQL访问MongoDB的解决方案,网络上已经可以查到很多.有相当一部分都是比较重的,有的需要安装插件,通过插件界面进行查询交互的,如:DataGrip:有的需要安装分布式计算引擎,并能提供更 ...
- SQL to ElasticSearch DSL
众所周知ElasticSearch目前是一个应用最为广泛的分布式搜索与分析引擎,它的功能强大,能够已很高的性能访问大规模数据.它拥有强大的查询分析语法,能够完成模糊查询.精准查询及聚集计算等诸多功能的 ...
- 神兵利器——使用LINQ to SQL检索和操作数据库
自.NET 3.0开始,LINQ(Language Integrated Query,整合查询语言)便逐渐出现在.NET开发的各个角落,它不仅提供了一种用于快速检索结构化标记语言(如XML)的方法,而 ...
- Excel VBA高级编程-SQL检索(二)合并相同项并求和
大家好,我是陈小虾,是一名自动化方向的IT民工.写博客是为了记录自己的学习过程,通过不断输出倒逼自己加速成长.但功能说明:由于水平有限,博客中难免会出现一些BUG,或者有更优方案恳请各位大佬不吝赐教! ...
- SQL to Elasticsearch java code
把Elasticsearch当成Database用,因为Elasticsearch不支持SQL,就需要把SQL转换成代码实现. 1.按某个field group by查询count SELECT fi ...
- 尚硅谷-SpringBoot高级-检索-Elasticsearch快速入门
前面我们安装好了ElasticSearch,我以后就简称他为ES,而一些人还不知道基本的使用,那我们接下来做一个快速入门,了解一下他的使用方法,以及一些基本概念,方便我们后来整合,那么要学习ES最好的 ...
- SpringBoot高级-检索-Elasticsearch简介安装
SpringBoot与检索,主要介绍使用ElasticSearch,包括我们来整合SpringBoot来进行操作,我们说全文检索功能,是我们现在非常常见的一个需求,我们这个开源的ElasticSear ...
最新文章
- python 自动化微信小程序_appium+python 微信小程序的自动化
- 【程序员必看】如何用Python从0开始创建一个区块链?
- BZOJ 4516 [Sdoi2016] 生成魔咒
- LeetCode 1011. 在 D 天内送达包裹的能力(二分查找)
- CSS属性(display)
- 解决mac使用svn: E170000: Unrecognized URL scheme for h
- python selenium中文文档-selenium-python中文版文档
- 花瓣网方砖布局 图片内容无限加载 用户体验才是王道
- Intel IPP安装和安装测试
- (ZT)算法杂货铺——分类算法之朴素贝叶斯分类(Naive Bayesian classification)
- [Linux网络编程]高并发-Epoll模型
- 计算机拓扑结构网状图,网络拓扑结构大全和图片(星型、总线型、环型、树型、分布式、网状拓扑结构)...
- 目标检测制作自己的VOC2007数据集
- 漫画人脸检测 | 全局和局部信息融合的深度神经网络(文末源码)
- 教你看懂Code128条形码
- 图像处理-图像金字塔
- SpringCloud微服务项目实战 - 5.自媒体文章审核
- 自定义函数实现对字符串的复制操作
- 【数理统计】均值检验(双侧、单侧)和区间估计
- tsd3dmapper软件使用方法_Mapper
热门文章
- SharePoint:扩展DVWP - 第34部分:使用图标形式的表单操作链接
- 浅谈C#中virtual和abstract的区别
- 圆投影匹配算法描述及实现
- 测试原理_耐压测试仪绝缘电阻测试仪基本原理与选用
- python123第四章第五题_Python123
- getset原子性 redis_RedisAPI原子性操作及原理解析
- php cms选择,php cms 选择哪个好?
- python pip工具命令_转载 Python 安装setuptools和pip工具操作方法(必看)
- jmeter安装 java,Windows下安装jmeter图文教程
- ctfd的mysql导入_centos7 CTFd平台搭建过程