一個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(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}}}}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章