[英]Automatic conversion of SQL query to ElasticSearch Query
我有一个服务,目前在Oracle DB中存储数据。 我正在开发一个项目,我需要运行一组sql查询来获取一些聚合数据。 我想将这些查询存储在一个地方,我可以迭代,并获得所需的数据。 说,我今天有10个查询。 但是,我可以继续添加更多,而无需编写代码。
但是,明天我们要切换到ElasticSearch。 有没有办法,我可以使用相同的SQL查询来搜索甚至ElasticSearch。
您可能希望查看此Elasticsearch插件,该插件旨在提供Elasticsearch之上的SQL层https://github.com/NLPchina/elasticsearch-sql
随着Elasticsearch 6.3在2018年6月发布 ,您可能不再需要“自动转换”了。
6.3版本附带本机SQL支持! (目前仍在实验中)
你(或你认识的人)有过:
- 说“ 我知道如何在SQL语句中做这件事 - 我如何在Elasticsearch中做同样的事情? ”
- 试图在像关系数据库这样的SQL引擎之上构建带有标记化 , 词干化 , 同义词 , 相关性排序的全文搜索?
- 试图将传统数据库扩展到数十亿行?
- 试图将像BI系统这样的第三方工具连接到Elasticsearch?
这些都是我们希望我们能够进入新的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工具完全免费。
你可能会做一些解析器,但是我不认为这甚至是一个好主意,即使解析器编写得很好。 你必须记住Elasticsearch使用倒排索引,因为它基于Lucene。 查询它会像查询关系数据库一样打败那个逻辑,因此甚至不清楚它是否对使用ElasticSearch有任何用处,你可能更好地坚持纯SQL查询。
此外,鉴于您目前只有10个查询并且您已经计划切换到ES,我强烈建议将这10个请求调整为适当的ES查询,切换到ES,然后仅在ES逻辑中创建新请求。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.