meysampg / eql
dev-master
2019-12-18 15:17 UTC
Requires (Dev)
- phpunit/phpunit: ^7.5|^8.0
This package is auto-updated.
Last update: 2021-07-15 14:12:56 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