该软件包已被弃用且不再维护。作者建议使用 paknahad/eql 软件包。

SQL 转换为 DSL(编写 SQL,在 ElasticSearch 上搜索)

dev-master 2019-12-18 15:17 UTC

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

Build Status Maintainability Test Coverage

概述

本项目将尝试成为 phpelasticsql 对等工具。

目前支持

  • 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