1. 程式人生 > >ElasticSearch分散式全文搜尋引擎的學習心得

ElasticSearch分散式全文搜尋引擎的學習心得

1.認識ElasticSearch

1.1:我們為什麼要去使用ElasticSearch

雖然全文搜尋領域,Lucene可以被認為是迄今為止最先進、效能最好的、功能最全的搜尋引擎庫。

但是,Lucene只是一個庫。想要使用它,你必須使用Java來作為開發語言並將其直接整合到你的應用中,更糟糕的是,Lucene的配置及使用非常複雜,你需要深入瞭解檢索的相關知識來理解它是如何工作的。

實際專案中,我們建立一個網站或應用程式,並要新增搜尋功能,令我們受打擊的是:搜尋工作是很難的。我們希望我們的搜尋解決方案要快,我們希望有一個零配置和一個完全免費的搜尋模式,我們希望能夠簡單地使用JSON/XML通過HTTP的索引資料,我們希望我們的搜尋伺服器始終可用,我們希望能夠從一臺開始並在需要擴容時方便地擴充套件到數百,我們要實時搜尋,我們要簡單的多租戶,我們希望建立一個雲的解決方案。

1.2:ElasticSearch簡稱es

ES即為了解決原生Lucene使用的不足,優化Lucene的呼叫方式,並實現了高可用的分散式叢集的搜尋方案,其第一個版本於2010年2月出現在GitHub上並迅速成為最受歡迎的專案之一。

首先,ES的索引庫管理支援依然是基於Apache Lucene(TM)的開源搜尋引擎。

ES也使用Java開發並使用Lucene作為其核心來實現所有索引和搜尋的功能,但是它的目的是通過簡單的 RESTful API來隱藏Lucene的複雜性,從而讓全文搜尋變得簡單。

不過,ES的核心不在於Lucene,其特點更多的體現為:

分散式的實時檔案儲存,每個欄位都被索引並可被搜尋

分散式的實時分析搜尋引擎

可以擴充套件到上百臺伺服器,處理PB級結構化或非結構化資料

高度整合化的服務,你的應用可以通過簡單的 RESTful API、各種語言的客戶端甚至命令列與之

互動。

上手Elasticsearch非常容易。它提供了許多合理的預設值,並對初學者隱藏了複雜的搜尋引擎理論。它擁有開瓶即飲的效果(安裝即可使用),只需很少的學習既可在生產環境中使用。

2.ElasticSearch的安裝

es服務只依賴於jdk,所有建議使用1.7及以上的jdk

① 下載ES安裝包

官方下載地址:https://www.elastic.co/downloads/elasticsearch

② 執行ES

bin/elasticsearch.bat

③ 驗證

訪問:http://localhost:9200/

3.ES互動方式

① 基於RESTful API

ES和所有客戶端的互動都是使用JSON格式的資料.

Curl命令方式:

預設windows下不支援curl命令

② Java API

ES為Java使用者提供了兩種內建客戶端:

節點客戶端(node client):

節點客戶端以無資料節點(none data node)身份加入叢集,換言之,它自己不儲存任何資料,但是它知道資料在叢集中的具體位置,並且能夠直接轉發請求到對應的節點上。

傳輸客戶端(Transport client):

這個更輕量的傳輸客戶端能夠傳送請求到遠端叢集。它自己不加入叢集,只是簡單轉發請求給叢集中的節點。

4:擴充套件(什麼是RESTful)

Restful是一種面向資源的架構風格,可以簡單理解為:使用URL定位資源,用HTTP動詞(GET,POST,DELETE,PUT)描述操作

使用Restful的好處:●透明性,暴露資源存在  充分利用 HTTP 協議本身語義 無狀態,這點非常重要(在呼叫一個資源介面的時候不用考慮上下文,不用考慮當前狀態,極大的降低了複雜度)

4.Restful的典型特徵:

① Server提供的RESTful API中,URL中只使用名詞來指定資源

② REST 是面向資源的,這個概念非常重要,而資源是通過 URI 進行暴露

③ 用HTTP協議裡的動詞來實現資源的新增,修改,刪除等操作。

5.輔助管理工具

① Kibana5.2.2下載地址:https://www.elastic.co/downloads/kibana

② 解壓並編輯config/kibana.yml,設定elasticsearch.url的值為已啟動的ES

③ 啟動Kibana5 : bin\kibana.bat

使用Dev Tools進行es程式碼程式設計

一個文件裡面不只有資料,它還包含元資料(metadata)—關於文件的資訊。三個必須的元資料節點是:

_index:索引庫,類似於關係型資料庫裡的“資料庫”—它是我們儲存和索引關聯資料的地方。

_type:在應用中,我們使用物件表示一些“事物”,例如一個使用者、一篇部落格、一個評論,或者一封郵件。可以是大寫或小寫,不能包含下劃線或逗號。我們將使用 employee 做為型別名。

_id:與 _index  和 _type  組合時,就可以在ELasticsearch中唯一標識一個文件。當建立一個文件,你可以自定義 _id  ,也可以讓Elasticsearch幫你自動生成。

6.使用Kibana5進行es的crud

6.1:建立一條資料(crm索引庫,student表,1代表欄位)

6.2:查詢一條資料

6.3:刪除一條資料

6.4:修改一條資料

6.5:進行批量新增

6.6:查詢全部

7.DSL查詢與過濾

7.1:什麼是DSL查詢

由ES提供豐富且靈活的查詢語言叫做DSL查詢(Query DSL),它允許你構建更加複雜、強大的查詢。

DSL(Domain Specific Language特定領域語言)以JSON請求體的形式出現。我們可以這樣表示之前關於“倪先華”的查詢:

查詢字串模式:GET crm/student/_search?q=fullName:倪先華

8.使用java進行es的crud

8.1:建立一個maven專案

8.2:在pom.xml寫入需要的包(可以弄一個本地倉庫就不用去網上下載jar包了)

8.3:先獲取客戶端


8.4:使用java程式碼新增一條資料

8.5:刪除一條資料

 

8.6:修改一條資料

 

8.7:如果有就修改沒有就建立一條資料

8.8:進行批量新增

8.9:進行高階查詢

希望這篇文章能讓想學習ElasticSearch的朋友有所幫助,一起共同進步,學習,交流!!!