项目环境
window10 + python3.7 + ElasticSearch6.3.2
写作目的
在一个基于python web系统的开发过程中,被指定要求使用elasticSearch数据库,但自身仅有MySQL使用经验,没有dsl语句的编写经验,其学习成本又比较高,最后是发现了一个可以将SQL语句转DSL语句,才得以快速完成项目需求。特此记录踩坑历程。
使用过程
1.安装ElasticSearch
总的来说,需要先配置好Java环境,配置好环境变量即可。详参——>elasticsearch安装与使用,此文中所说的ElasticSearch-head不安装也可。
2.安装elasticsearch-sql
进入elasticsearch-sql官网,根据教程及相应指令下载对应版本的elasticsearch-sql,本文中使用的版本为6.3.2,所以选择如下命令:
./bin/elasticsearch-plugin install https://github.com/NLPchina/elasticsearch-sql/releases/download/6.3.2.0/elasticsearch-sql-6.3.2.0.zip
下载对应的网页访问工具(根据教程提示,本文选择elasticsearch sql site chrome extension方式),此种方式需要修改ElasticSearch中的相应配置,具体见elasticsearch sql
注意: Github上给出的elasticsearch sql site chrome extension对应于elasticsearch-sql最新版,但elasticsearch版本不同从而其中的sql访问接口也就不同,所以需要修改elasticsearch sql site chrome extension包中controller.js文件的中的sql访问接口。
具体的不同已在elasticsearch-sql中的readme中给出,如下:
然后就可以elasticsearch sql site chrome extension中的index主页进行sql查询了,而且还可将sql转换成dsl语句
3.python中使用ElasticSearch
安装python版本ElasticSearch,注意版本对应。
编写Dsl语句即可,不会Dsl语句的,可以使用先前的elasticsearch-sql工具进行转换。DSL语句例子见:python 查询 elasticsearch 常用方法(Query DSL)
注
SQL中的like语句,建议使用DSL中的match语句(需手动在生成的DSL中修改)。在SQL中进行GRUOP BY对字段进行聚类时,需使用字段的keyword形式,如GRUOP BY a.keyword。
参考
写入数据
安装中文分词插件elasticsearch-analysis-ik
python使用sql访问ES