paknahad / eql
将 SQL 转换为 DSL(写 SQL,在 ElasticSearch 上搜索)
dev-master
2019-12-18 15:17 UTC
Requires (Dev)
- phpunit/phpunit: ^7.5|^8.0
This package is not auto-updated.
Last update: 2024-09-20 12:34:36 UTC
README
EEEEEEEEEEEEEEEEEEEEEE QQQQQQQQQ LLLLLLLLLLL
E::::::::::::::::::::E QQ:::::::::QQ L:::::::::L
E::::::::::::::::::::E QQ:::::::::::::QQ L:::::::::L
EE::::::EEEEEEEEE::::EQ:::::::QQQ:::::::QLL:::::::LL
E:::::E EEEEEEQ::::::O Q::::::Q L:::::L
E:::::E Q:::::O Q:::::Q L:::::L
E::::::EEEEEEEEEE Q:::::O Q:::::Q L:::::L
E:::::::::::::::E Q:::::O Q:::::Q L:::::L
E:::::::::::::::E Q:::::O Q:::::Q L:::::L
E::::::EEEEEEEEEE Q:::::O Q:::::Q L:::::L
E:::::E Q:::::O QQQQ:::::Q L:::::L
E:::::E EEEEEEQ::::::O Q::::::::Q L:::::L LLLLLL
EE::::::EEEEEEEE:::::EQ:::::::QQ::::::::QLL:::::::LLLLLLLLL:::::L
E::::::::::::::::::::E QQ::::::::::::::Q L::::::::::::::::::::::L
E::::::::::::::::::::E QQ:::::::::::Q L::::::::::::::::::::::L
EEEEEEEEEEEEEEEEEEEEEE QQQQQQQQ::::QQLLLLLLLLLLLLLLLLLLLLLLLL
Q:::::Q
QQQQQQ
概述
本项目将尝试成为 php
版本的 elasticsql。
当前支持
- sql 和表达式
- sql 或表达式
- 支持等于(=)
- 支持不等于(!=)
- 支持大于(>)
- 支持大于等于(>=)
- 支持小于(<)
- 支持小于等于(<=)
- 支持 SQL in 表达式(例如:id in (1,2,3))
- 支持 SQL not in 表达式(例如:id not in (1,2,3))
- 支持括号布尔表达式(例如:where (a=1 or b=1) and (c=1 or d=1))
- 支持 SQL like 表达式(当前使用匹配短语,可能未来会改为通配符)
- 支持 SQL order by
- 支持 SQL limit
- 支持 SQL not like 表达式
- 支持字段缺失检查
- 支持聚合函数如 count(*)、count(field)、min(field)、max(field)、avg(field)
- 支持聚合函数如 stats(field)、extended_stats(field)、percentiles(field),这些不是标准的 SQL 函数
- 支持空值检查表达式(is null/is not null)
- 支持连接表达式
- 支持 having
用法
> composer require meysampg/eql
演示
<?php namespace Sample; use Meysampg\Eql\Parser; $sql = " select * from aaa where a=1 and x = '三个男人' and create_time between '2015-01-01T00:00:00+0800' and '2016-01-01T00:00:00+0800' and process_id > 1 order by id desc limit 100,10 "; function main() { $dsl = Parser::buildFrom($sql); print_r(json_encode($dsl)); }
将产生
{ "query": { "bool": { "must": [ { "match": { "a": { "query": "1", "type": "phrase" } } }, { "match": { "x": { "query": "三个男人", "type": "phrase" } } }, { "range": { "create_time": { "from": "2015-01-01T00:00:00+0800", "to": "2016-01-01T00:00:00+0800" } } }, { "range": { "process_id": { "gt": "1" } } } ] } }, "from": 100, "size": 10, "sort": [ { "id": "desc" } ] }
如果你的 SQL 包含一些关键字,例如 order、timestamp,别忘了像下面这样转义这些字段:
select * from `order` where `timestamp` = 1 and `desc`.id > 0