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的朋友有所幫助,一起共同進步,學習,交流!!!