一个C++的ElasticSearch Client
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().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().Source({"name"}).Sort(
{MakeObject("timestamp",MakeObjectString("order", "desc"))}
).Query(
Range1(
"id",
MakePair("lt",)
));
printf("%s\n", dsl.c_str());
// {"size":10,"_source":["name"],"sort":[{"timestamp":{"order":"desc"}}],"query":{"range":{"id":{"lt":567}}}}
一个C++的ElasticSearch Client的更多相关文章
- ElasticSearch client API
从运行结果看并没有打印节点信息出来 从结果看出来,集群节点信道打印出来了,不过这种方法有个问题,就是当我们连接的节点挂掉了,就没法连接整个集群了,这个时候我们就利用他的一个嗅探的功能. 从这里我们可以 ...
- elasticsearch client
你可以用client做很多事情: 在集群中执行index, get, delete, search,update 操作 在集群中执行administrative tasks 如果你想再程序中嵌入ela ...
- maven包引入问题ClassNotFoundException: org.elasticsearch.client.Cancellable
业务需要,做搜索功能,在springboot聚合项目下,新建了es模块module 但是在引入elasticsearch依赖的时候,出现了问题 引入相应依赖后 <dependency> & ...
- org.elasticsearch.client.transport.NoNodeAvailableException
SpringBoot连接elasticsearch异常 2018-09-11 16:03:43.692 ERROR 8684 --- [ main] o.s.boot.SpringApplicatio ...
- Elasticsearch教程(六) elasticsearch Client创建
Elasticsearch 创建Client有几种方式. 首先在 Elasticsearch 的配置文件 elasticsearch.yml中.定义cluster.name.如下: cluster ...
- Failed to instantiate [org.elasticsearch.client.transport.TransportClient]
Springboot 集成 ElasticSearch,springboot报错如下: Error starting ApplicationContext. To display the auto-c ...
- 基于Netty和SpringBoot实现一个轻量级RPC框架-Client端请求响应同步化处理
前提 前置文章: <基于Netty和SpringBoot实现一个轻量级RPC框架-协议篇> <基于Netty和SpringBoot实现一个轻量级RPC框架-Server篇> & ...
- 手写一个简单的ElasticSearch SQL转换器(一)
一.前言 之前有个需求,是使ElasticSearch支持使用SQL进行简单查询,较新版本的ES已经支持该特性(不过貌似还是实验性质的?) ,而且git上也有elasticsearch-sql 插件, ...
- Elasticsearch client node 启动时出现警告:exception caught on transport layer 及java.net.NoRouteToHostException: No route to host
发现该问题源自发现kibana不能打开sense,并且看见elasticsearch插件处于服务不可用状态,但是在client node上curl localhost:9200发现能够返回ES基本信息 ...
随机推荐
- 超级实用的表格树控件--QtTreePropertyBrowser
目录 一.源码下载 二.代码编译 1.intersect函数替换为intersected 2.移除UnicodeUTF8 3.QtGui模块拆分 4.Q_TYPENAME错误 5.qVariantVa ...
- html更改弹窗样式(原创,转载需声明)
代码如下: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <tit ...
- You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'wher id = 41' at line 1
where 没有打完整
- <h2>js数组操作大全(pop,push,unshift,splice,shift方法)</h2>
---恢复内容开始--- shift:删除原数组第一项,并返回删除元素的值:如果数组为空则返回undefined var a = [1,2,3,4,5]; var b = a.shift(); //a ...
- IO侦探:多进程写ceph-fuse单文件性能瓶颈侦查
近期接到ceph用户报案,说是多进程direct写ceph-fuse的单个文件,性能很低,几乎与单进程direct写文件的性能一样.关乎民生,刻不容缓,笔者立即展开侦查工作~ 一.复现案情,寻踪追记 ...
- Codeforces Gym101097I:Sticks (思维)
http://codeforces.com/gym/101097/attachments 题意:现在有k种颜色的木棍,每种颜色有ni根木棍,每根木棍有一个长度,问是否有三根木棍可以组成三角形,并且这三 ...
- BZOJ 2039人员雇佣
这道题教会我们一个道理靠谁也不如靠自己. 当时学长已经讲了,然而一脸懵逼,好吧,上网搜题解,二脸懵逼,于是自己动手,丰衣足食.自己推! 首先就是建模了,这道题谁与谁之间建模已经十分明了,超级源点,超级 ...
- 20140115-SqlHelper为什么是静态的
为什么SqlHelper(或工具类)是静态的? 静态构造函数仅调用一次(即只是在程序生命周期中实例一次),在程序驻留的应用程序域的生存期内,静态类一直保留在内存中 这样可以减少每次使用的实例过程,就是 ...
- tomcat配置https以及配置完成后提示服务器缺少中间证书(已解决)
#### tomcat配置https 准备工作 下载好证书文件,下载的时候可以选择为tomcat文件.我这下载下来是压缩包.解压后就是下图的样子. 以.key结尾的文件是证书的key 以.pem结尾的 ...
- python爬虫笔记之用cookie访问需要登录的网站
目标:用cookie访问一个需要登录的网站 如图,直接访问会跳转到登录页面,提示登录. 运行结果: 直接在浏览器上输入该url,网站立马跳转到登录页面. 方法: 1.先手动登录,通过抓包获取coo ...