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
来源:oschina
链接:https://my.oschina.net/u/4385788/blog/3587882