一个C++的ElasticSearch Client
程序员文章站
2022-06-23 23:06:23
ElasticSearch官方是没有提供C++的client的;因此决定自己写一个,命名为ESClient https://github.com/ATinyAnt/ESClient(手下留星 star) 优势是简单易用: * 封装大幅度减少了直接写DSL的机会,避免了一些非逻辑错误 * 只需要包含头 ......
elasticsearch官方是没有提供c++的client的;因此决定自己写一个,命名为esclient https://github.com/atinyant/esclient(手下留星 star)
优势是简单易用:
* 封装大幅度减少了直接写dsl的机会,避免了一些非逻辑错误
* 只需要包含头文件 request.h即可以使用
* 复杂的语句,可支持用原生(raw)json嵌套
目前esclient只支持常用的搜索短语,暂不支持插入、更新、删除和响应处理;原因是我们做elasticsearch服务时,一般只会用到搜索,而数据一般由其它进程清洗后,插入到elasticsearch中。并不是由当前的服务来进行增、删、改。当然后续会陆续完善这一部分(也希望你们可以帮忙完善)。
这个client,我并不想加入http模块,因为我认为加入http,很容易会侵入了使用者原来的架构。因此,这只是做一个dsl的编码器;编码得到json,可由使用者当前架构的http模块调用。
以下是两个使用例子
#include "request.h" using namespace es; request r; std::string dsl = r.size(10).source({ "id" }).query(regexp("name", ".*tiny.*")); printf("%s\n", dsl.c_str()); // {"size":10,"_source":["id"],"query":{"regexp":{"name":".*tiny.*"}}}
#include "request.h" using namespace es; request r; std::string dsl = r.size(10).source({"name"}).sort( {makeobject("timestamp",makeobjectstring("order", "desc"))} ).query( range1( "id", makepair("lt",567) )); printf("%s\n", dsl.c_str()); // {"size":10,"_source":["name"],"sort":[{"timestamp":{"order":"desc"}}],"query":{"range":{"id":{"lt":567}}}}
推荐阅读
-
分享一个C++与Python开发的中小型通用游戏服务端框架(跨平台,开源,适合MMORPG游戏)
-
发布一个基于协程和事件循环的c++网络库
-
C++的ifstream中使用eof最后一个字符输出两次的问题
-
c/c++ 多线程 多个线程等待同一个线程的一次性事件
-
C++笔记一(创建一个不带指针成员变量的类)[注意事项]
-
C++实现LeetCode(34.在有序数组中查找元素的第一个和最后一个位置)
-
【C++算法基础】利用位运算来判断一个数的奇偶性
-
C++程序员如何向一个java工程师解释extern "C"的作用
-
编写一个C++程序,它显示您的姓名和地址
-
c++:请编写一个函数,对字符串“zheshigekendiedetimu”按从大到小的顺序排列,并截取后n位数(n为函数的一个参数)。