一、前言

作为一名phper,之前查询数据之类用的都是普通的sql,现在突然要用ES的DSL查询,实在是有点艰难。刚好在看大佬博客的时候,看到大佬提了一句关于sql转化的插件,于是立马去研究一下。

二、那些年我们研究过的插件

1、ElasticHQ工具

(1)下载安装
(2)本地安装python 3.4+
(3)进入安装ElasticHQ的主目录,执行:pip install -r requirements.txt
(4)进入安装ElasticHQ的主目录,启动服务器命令:python3 application.py
(5)浏览器输入:localhost:5000
(6)官方文档:http://docs.elastichq.org/installation.html

没找到那个tool,也没找到翻译功能,不知道人家的页面是怎么弄的。大神成功翻译的截图:https://blog.csdn.net/laoyang360/article/details/78556221

2、Elasticsearch-sql工具

(1)可以在浏览器直接通过sql的形式获取数据(2)可以把普通的sql转化为DSL语言(3)官方文档:https://github.com/NLPchina/elasticsearch-sql(4)优秀博客:https://blog.csdn.net/cb2474600377/article/details/78181974(5)注意:在elasticsearch 1.x / 2.x上,可以直接访问elasticsearch-sql web前端页面:http://localhost:9200/_plugin/sql/
在elasticsearch 5.x / 6.x上,需要先下载个网站插件 download and extract site.  链接:https://github.com/NLPchina/elasticsearch-sql/releases/download/5.4.1.0/es-sql-site-standalone.zip(6)下载浏览器插件,然后依次执行:cd site-servernpm install express --save     //npm installnode node-server.js        //这个命令执行之后,输入框没什么明显反应,此时直接访问端口即可(7)elasticsearch-sql的默认端口是8080,可以在site-server/site_configuration.json文件中进行修改 (8)浏览器能正常访问之后,在右上角有一个地址,这个地址要填上我们的ES的地址,例如:locahost:9200

3、能把mysql的sql转化为es的DSL的php操作类库

github:https://github.com/qieangel2013/EsParser
(PS:这个我测试了下,只能翻译很简单的sql,而且没人维护了。。,不建议使用)

三、测试sql转化(Elasticsearch-sql)

下载安装了三个类库,只有这个能用了,测试一下下。。

1、写一个简单的sql

select * from test_access2/test_2 where name='chero_devel.ucool.com' limit 1,2

2、使用es-sql生成DSL

{"from": 1,"size": 2,"query": {"bool": {"filter": [{"bool": {"must": [{"match_phrase": {"name": {"query": "chero_devel.ucool.com","slop": 0,"boost": 1}}}],"adjust_pure_negative": true,"boost": 1}}],"adjust_pure_negative": true,"boost": 1}}
}

这部分博主是记录在记事本上的笔记,所以已经把DSL的括号什么的都对上了,看起来有点怪,各位见谅哈

3、在ES-PHP方法中按照生成的DSL查询

 public function actionTestSql(){$params = ['index' => 'test_access2','type' => 'text_2','body' => ["from"=> 1,"size"=> 2,"query"=> ["bool"=> ["filter"=> ["bool"=>["must"=>["match_phrase"=> [//source.beat.name"source.beat.name"=> ["query"=> "chero_devel.ucool.com","slop"=> 0,"boost"=> 1]]],"adjust_pure_negative"=> true,"boost"=> 1]],"adjust_pure_negative"=> true,"boost"=> 1]]]];$repos =  $this->client->search($params);var_dump($repos);exit;}

4、成功查到了数据

但是,生成的格式是json的,php还要自己转化成数组的格式,然后调用API,实在是,有些过于痛苦了,只能提升一丢丢速度吧。切记要把中括号都对应好,不然对应不好的话,会报错:

 {"root_cause":[{"type":"parsing_exception","reason":"[bool] malformed query, expected [END_OBJECT] but found [FIELD_NAME]","line":1,"col":194}]

四、其他

1、ES聚合的性能优化

https://blog.csdn.net/wangmaohong0717/article/details/82429278

把group by和limit等转化为DSL:https://segmentfault.com/a/1190000014946753

2、ES通过父子文档的来实现mysql中的join问题

https://blog.csdn.net/ctwy291314/article/details/82781667  (ES6.0之后的父子级关系和6.0之前的父子级关系不一样,需要警惕)

3、我的理解

测试了一整圈,发现最终还是要自己来拼写DSL查询了。既然涉及到大数据,那查询的sql也是很复杂的,这些插件都不怎么靠谱,翻译简单的还行,复杂的就直接报错。对,说的就是那个Elasticsearch-sql,随便一个复杂的sql直接报错了,日哦。

不过,ES6.3发布之后,带来了很多新特性,参考;https://www.elastic.co/blog/elasticsearch-6-3-0-released 其中最大的亮点,莫过于内置支持SQL模块。不过截止到现在,6.7之后的版本已经把sql部分的工作作为GA(release)发布,单纯的sql查询是免费提供的功能,如果版本够新,还是用自带的更靠谱一些。

end

Elasticsearch能把普通的sql翻译成DSL的插件相关推荐

  1. 【人工智能 Open AI】设计一个SQL Where DSL模型,使用 golang 代码来实现DSL的翻译成SQL。

    设计一个SQL Where DSL模型,使用 golang 代码来实现DSL的翻译成SQL. 下面是使用golang代码实现DSL模型的示例: package mainimport ("fm ...

  2. oracle网页怎么翻译成中文,sql语句翻译成中文小工具

    sql语句看不懂,今天看了朋友写的一个sql语句,没看懂什么意思,还 这个应该是SQL2005以上版本的语句,且该语句用于临时用途:with关键字从resume表生成一个CTE(用表表达式,仅作用于单 ...

  3. Hadoop Hive 创建表及count/distinct操作(会被翻译成mr程序)

    sql语句将会翻译成mapreduce程序进行执行,查看如下运行日志可知:

  4. 英文版的pdf文件怎么翻译成中文-免费的自动翻译器

    文档英文翻译成中文 如果您想将英文文档翻译成中文,以下是几种可用的方法: 使用机器翻译工具 - 机器翻译是将英文文本通过计算机程序转换成中文.您可以使用在线翻译服务,如Google翻译.百度翻译.有道 ...

  5. linux我的世界乱码,我的世界附魔台文字翻译成普通文字 附魔台文字乱码解决办法...

    附魔台上的字我都看不懂,没关系今天小编教大家如何在我的世界中将附魔台上的文字翻译成普通的文字,喜欢的朋友快来看看吧! 首先 使用壓縮工具將你的minecraft.jar打開 (通常位置在C:Users ...

  6. 【剑指Offer】个人学习笔记_46_把数字翻译成字符串

    目录 题目: [剑指 Offer 46. 把数字翻译成字符串](https://leetcode-cn.com/problems/ba-shu-zi-fan-yi-cheng-zi-fu-chuan- ...

  7. 整站翻译,英文网页批量翻译成中文

    怎么将整站英文网页翻译成中文,需要将整个网站的英文内容进行批量翻译成中文需要分两步进行,首先是对整个网站页面进行抓取,其次是对抓取的页面进行批量中文翻译.通过SEO内容处理工具我们可以轻松实现这个操作 ...

  8. C++程序翻译成C语言程序

    C++程序翻译成C语言程序 C++语言是在C语言的基础上发展过来的,第一个C++的编译器实际上是将C++程序翻译成C原因程序,再通过C语言编译器进行编译. 然而C语言中没有类的概念,只有结构,而且函数 ...

  9. OpenAI数十亿代码训出Codex:能将英语翻译成代码,给四句话就能写个神经网络...

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 来源:大数据文摘本文约2088字,建议阅读4分钟 本文介绍了Open ...

最新文章

  1. 安装软件要求输入服务器配置信息,信息技术考试软件配置安装与操作规范(管理服务端与客户端)(30页)-原创力文档...
  2. 全局路径规划:图搜索算法介绍2(A star)
  3. vonic 环境配置_Vonic 2.0 全新文档站上线
  4. oracle 查询XML操作、操作系统文件
  5. 智能优化算法:旗鱼优化算法-附代码
  6. 第二季-专题14-串口来做控制台
  7. 【CASS精品教程】CASS9.1查询功能大全(坐标、长度、面积、方位角)
  8. shel中的if-else语句
  9. 一个web页面的访问的过程
  10. ruby0.49稀里糊涂编译成功了
  11. java中画幅相机推荐_比全画幅更大 平民中画幅相机推荐
  12. zTree 异步删除节点操作
  13. 我是如何拿到:百度 腾讯 头条 美团 度小满等互联网offer的?
  14. 【CSDN软件工程师能力认证学习精选】Python网络编程(socket编程)
  15. Docker(三)- 从镜像运行启动容器
  16. 查询数据库表修改记录的sql语句
  17. 安全运维到安全运营的转变
  18. ffmpeg 的那些坑
  19. 【Wiki】XWiki数据备份
  20. 刘强东:中国几千万穷人是富人耻辱!网友狂点赞;12月全球数据库排名出炉...

热门文章

  1. 沈阳工学院本科有计算机吗,沈阳工学院是几本大学,沈阳工学院是一本还是二本...
  2. 织梦php安装无数据库,DeDeCms织梦程序安装及使用常见问题集锦
  3. UI设计面试思路如何整理?
  4. 1454 糖果的游戏
  5. R语言数字 时间戳转化成时间
  6. 国产WEB管理交换机的VLAN配置
  7. 智慧产业园区标准体系总体框架
  8. MATLAB可视化大学物理学光盘,MATLAB可视化大学物理学
  9. Keil芯片包下载及安装教程
  10. 基于XPO创建ZeroCode数据感知Winform应用程序