一个C++的ElasticSearch Client

本文介绍了一款名为ESClient的C++客户端,用于简化与ElasticSearch的交互过程。该客户端通过封装DSL减少直接写入的机会,避免非逻辑错误,并支持复杂的原生Json嵌套。虽然目前仅支持常用搜索短语,但计划后续增加更多功能。

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}}}}

 

转载于:https://www.cnblogs.com/atinyant/p/11285122.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值