zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    每周学算法/读英文/知识点心得分享 1.28
    ARTS 1.21
    ARTS 1.14
    ARTS 1.7
    ARTS 12.31
    ARTS 12.24
    Leetcode : Median of Two Sorted Arrays
    我是怎样改善遗留系统的
    《大话重构》免费送书活动开始啦
    我的新书终于要出来啦
  • 原文地址:https://www.cnblogs.com/rongfengliang/p/10646988.html
Copyright © 2011-2022 走看看