将SQL查询自动转换为ElasticSearch Query

时间:2015-05-21 13:24:08

标签: mysql elasticsearch

我有一项服务,目前在Oracle DB中存储数据。 我正在开发一个项目,我需要运行一组sql查询来获取一些聚合数据。我想将这些查询存储在一个地方,我可以迭代,并获得所需的数据。 说,我今天有10个查询。但是,我可以继续添加更多内容,而无需编写代码。

但是,明天我们要切换到ElasticSearch。有没有办法,我可以使用相同的SQL查询来搜索甚至ElasticSearch。

3 个答案:

答案 0 :(得分:3)

您可能希望查看此Elasticsearch插件,该插件旨在在Elasticsearch之上提供SQL层 https://github.com/NLPchina/elasticsearch-sql

答案 1 :(得分:1)

2018年6月Elasticsearch 6.3 released,您可能不再需要“自动转换”了。

6.3版本附带本机SQL支持! (目前仍在试验中)

  

你(或你认识的人)曾经:

           

我们希望这些内容能够进入我们的新Elasticsearch SQL版本

     

我们希望允许开发人员,数据科学家和其他熟悉SQL语言的人 - 但到目前为止还不熟悉或无法使用Elasticsearch查询语言 - 来使用速度,可伸缩性和全文Elasticsearch提供的力量以及其他人已经逐渐了解和喜爱。

     

如果您刚刚开始使用此功能或Elasticsearch的强大功能,请尝试以下几点:

     
      
  • SELECT … ORDER BY SCORE() DESC能够按搜索结果的相关性进行排序
  •   
  • 使用像MATCH
  • 这样的SELECT … WHERE MATCH(fieldname, 'some text')运算符,从标记化中获取所有全文魔法   
  • 使用我们的JDBC驱动程序
  • 将您最喜爱的JDBC兼容工具连接到Elasticsearch   
  • 通过翻译API翻译您知道的SQL查询,了解如何充分利用Elasticsearch DSL
  •   
     

请注意,此功能在Elasticsearch和REST API的“默认”(仅限非OSS)分发版中提供 - 包括“翻译”功能和CLI工具完全免费。

答案 2 :(得分:0)

你可能会做一些解析器,但是我再也不认为这是一个好主意,即使解析器编写得很好。你必须记住Elasticsearch使用倒排索引,因为它基于Lucene。查询它会像查询关系数据库一样打败那个逻辑,因此它甚至不清楚是否可以使用ElasticSearch,你可能更好地坚持纯SQL查询。

另外,鉴于您目前只有10个查询并且您已经计划切换到ES,我强烈建议将这10个请求调整为正确的ES查询,切换到ES,然后仅在其中创建新请求ES逻辑。