使用C#代碼實現(xiàn)對ElastiSearch的編程查詢,是十分方便的,通常情況下,開發(fā)者采用官方提供的NEST客戶端程序,通過封裝的方法向ElasticSearch引擎發(fā)送查詢請求,搜索數(shù)據(jù),最終獲取返回的查詢結(jié)果,實現(xiàn)預定的業(yè)務需求。在內(nèi)部,NEST客戶端通過格式化的數(shù)據(jù)結(jié)構(gòu),把C#代碼轉(zhuǎn)換成HTTP 請求(Request),減輕了用戶直接編寫Qeury DSL的麻煩。當然,用戶也可以直接把Query DSL封裝成HTTP請求,發(fā)送到ElasticSearch引擎;對開發(fā)者來說,不僅需要熟悉Query DSL的語法,而且需要手動編寫代碼,處理引擎返回的JSON結(jié)構(gòu)化的數(shù)據(jù)集,采用這種方式的優(yōu)點是不受限于NEST客戶端程序,能夠最大化使用ElasticSearch查詢的各種參數(shù),書寫自由。

本文簡單介紹使用C#代碼對ElasticSearch進行編程查詢的流程,具體的細節(jié),請參考官方文檔。

一,編程流程

1,創(chuàng)建客戶端

在搜索文檔之前,首先要連接到ElasticSearch引擎,創(chuàng)建客戶端對象

using Nest;var node = new Uri("http://myserver:9200");var settings = new ConnectionSettings(node).DefaultIndex("default");var client = new ElasticClient(settings);

2,創(chuàng)建查詢請求

連接到引擎之后,創(chuàng)建搜索請求(SearchRequest),用于封裝查詢類型和查詢條件

SearchRequest sr = new SearchRequest("meetup", "events");

3,指定查詢類型和查詢條件

為搜索請求指定查詢類型,可以是詞條搜索,或全文搜索

TermQuery tq = new TermQuery();
tq.Field = "eventname";
tq.Value = "azure";
sr.Query = tq;

4,調(diào)整查詢結(jié)果

為搜索請求設置參數(shù),排序,分頁,和選擇返回的字段等,在選擇查詢結(jié)果返回的字段時,推薦在查詢請求(SearchRequest)中使用Source Filter。

在查詢請求中,通過類RequestSearch的數(shù)組字段StoredFileds,把已存儲字段添加到該數(shù)組中,ElasticSearch引擎只返回特定的字段,而不是文檔的所有字段。在索引映射中,已存儲字