zombodb  query dsl

zombodb query dsl 是为了简化es 查询的处理,同时可以兼容基本上所有的es 操作
一个简单的查询,查询任何字段包含cats 以及dogs 的

SELECT * FROM table WHERE table ==> <cats and dogs query here>

zombodb 会将这个sql 查询处理,转化为 zdbquery ,实际上我们可以通过查询分析也看出来

zombodb 查询语法

支持类似google 搜索的模式,实现是基于es 的查询语法

  • 一个简单查询
SELECT * FROM table WHERE table ==> '+cats +dogs';
SELECT * FROM table WHERE table ==> 'cats AND dogs';

实际的处理

SELECT '+cats +dogs'::zdbquery::json;
                   json                   
------------------------------------------
 {"query_string":{"query":"+cats +dogs"}}

SELECT 'cats AND dogs'::zdbquery::json;
                    json                    
--------------------------------------------
 {"query_string":{"query":"cats AND dogs"}}
  • 直接json 格式的查询
SELECT * FROM table WHERE table ==> '{"bool":{"must":[{"term":{"zdb_all":{"value":"cats"}}},{"term":{"zdb_all":{"value":"dogs"}}}]}}';
  • sql builder api
    使用zombodb 封装好的dsl 方式,包含了基本上所有的查询处理
SELECT * FROM table WHERE table ==> dsl.and('cats', 'dogs');
SELECT * FROM table WHERE table ==> dsl.and(dsl.term('zdb_all', 'cats'), dsl.term('zdb_all', 'dogs'));

实际上json查询

SELECT dsl.and('cats', 'dogs')::json;
                                          must                                           
-----------------------------------------------------------------------------------------
 {"bool":{"must":[{"query_string":{"query":"cats"}},{"query_string":{"query":"dogs"}}]}}

SELECT dsl.and(dsl.term('zdb_all', 'cats'), dsl.term('zdb_all', 'dogs'))::json;
                                              must                                               
-------------------------------------------------------------------------------------------------
 {"bool":{"must":[{"term":{"zdb_all":{"value":"cats"}}},{"term":{"zdb_all":{"value":"dogs"}}}]}}

排序&&限制查询结果

  • 格式参考
SELECT * FROM table WHERE table ==> dsl.limit(10, dsl.term('title', 'cat'));
SELECT * FROM table WHERE table ==> dsl.sort('id', 'asc', dsl.limit(10, dsl.term('title', 'cat')));
  • 说明
    zombodb 的dsl 包含了基本上所有的排序以及显示查询条目的处理,比如dsl.limit ,``dsl.offset,dsl.sort`...

说明

更多的函数建议可以结合es 的查询语法以及官方文档

参考资料

https://github.com/zombodb/zombodb/blob/master/QUERY-DSL.md

原文地址:https://www.cnblogs.com/rongfengliang/p/10646988.html