REST : 表現層狀態轉化(Representational State Transfer),如果一個架構符合REST原則,就稱它爲 RESTful 架構風格。
資源: 所謂"資源",就是網路上的一個實體,或者說是網路上的一個具體資訊
表現層 :我們把"資源"具體呈現出來的形式,叫做它的"表現層"(Representation)。
狀態轉化(State Transfer):如果用戶端想要操作伺服器,必須通過某種手段,讓伺服器端發生"狀態轉 化"(State Transfer)。而這種轉化是建立在表現層之上的,所以就是"表現層狀態轉化"。
REST原則就是指一個URL代表一個唯一資源,並且通過HTTP協定裏面四個動詞:GET、POST、PUT、DELETE對應四種伺服器端的基本操作: GET用來獲取資源,POST用來新增資源(也可以用於更新資源),PUT用來更新資源,DELETE用來刪除資源。
全文檢索是計算機程式通過掃描文章中的每一個詞,對每一個詞建立一個索引,指明該詞在文章中出現的次數和位置。當使用者查詢時根據建立的索引查詢,類似於通過字典的檢索字表查字的過程。
檢索: 索(建立索引) 檢:(檢索索引)
全文檢索(Full-Text Retrieval(檢索))以文字作爲檢索物件,找出含有指定詞彙的文字。全面、準確和快速是衡量全文檢索系統的關鍵指標。
關於全文檢索,我們要知道:
1. 只處理文字。
2. 不處理語意。
3. 搜尋時英文不區分大小寫。
4. 結果列表有相關度排序。
ElasticSearch 簡稱 ES ,是基於Apache Lucene構建的開源搜尋引擎,是當前流行的企業級搜尋引擎。Lucene本身就可以被認爲迄今爲止效能最好的一款開源搜尋引擎工具包,但是lucene的API相對複雜,需要深厚的搜尋理論。很難整合到實際的應用中去。但是ES是採用java語言編寫,提供了簡單易用的RestFul API,開發者可以使用其簡單的RestFul API,開發相關的搜尋功能,從而避免lucene的複雜性。
多年前,一個叫做Shay Banon的剛結婚不久的失業開發者,由於妻子要去倫敦學習廚師,他便跟着也去了。在他找工作的過程中,爲了給妻子構建一個食譜的搜尋引擎,他開始構建一個早期版本的Lucene。
直接基於Lucene工作會比較困難,所以Shay開始抽象Lucene程式碼以便Java程式設計師可以在應用中新增搜尋功能。他發佈了他的第一個開源專案,叫做「Compass」。
後來Shay找到一份工作,這份工作處在高效能和記憶體數據網格的分佈式環境中,因此高效能的、實時的、分佈式的搜尋引擎也是理所當然需要的。然後他決定重寫Compass庫使其成爲一個獨立的服務叫做Elasticsearch。
第一個公開版本出現在2010年2月,在那之後Elasticsearch已經成爲Github上最受歡迎的專案之一,程式碼貢獻者超過300人。一家主營Elasticsearch的公司就此成立,他們一邊提供商業支援一邊開發新功能,不過Elasticsearch將永遠開源且對所有人可用。
Shay的妻子依舊等待着她的食譜搜尋……
ES主要以輕量級JSON作爲數據儲存格式,這點與MongoDB有點類似,但它在讀寫效能上優於 MongoDB 。同時也支援地理位置查詢 ,還方便地理位置和文字混合查詢 。 以及在統計、日誌類數據儲存和分析、視覺化這方面是引領者。
Wikipedia(維基百科)使用ES提供全文搜尋並高亮關鍵字、StackOverflow(IT問答網站)結合全文搜尋與地理位置查詢、Github使用Elasticsearch檢索1300億行的程式碼。
百度(在雲分析、網盟、預測、文庫、錢包、風控等業務上都應用了ES,單叢集每天匯入30TB+數據, 總共每天60TB+)、新浪 、阿裡巴巴、騰訊等公司均有對ES的使用。
使用比較廣泛的平臺ELK(ElasticSearch, Logstash, Kibana)。
Elasticsearch是一個接近實時的搜尋平臺。這意味着,從索引一個文件直到這個文件能夠被搜尋到有一個輕微的延遲(通常是1秒內)
一個索引就是一個擁有幾分相似特徵的文件的集合。比如說,你可以有一個客戶數據的索引,另一個產品目錄的索引,還有一個訂單數據的索引。一個索引由一個名字來標識(必須全部是小寫字母的),並且當我們要對這個索引中的文件進行索引、搜尋、更新和刪除的時候,都要使用到這個名字。索引類似於關係型數據庫中Database 的概念。在一個叢集中,如果你想,可以定義任意多的索引。
在一個索引中,你可以定義一種或多種型別。一個型別是你的索引的一個邏輯上的分類/分割區,其語意完全由你來定。通常,會爲具有一組共同欄位的文件定義一個型別。比如說,我們假設你運營一個部落格平臺並且將你所有的數 據儲存到一個索引中。在這個索引中,你可以爲用戶數據定義一個型別,爲部落格數據定義另一個型別,當然,也可 以爲評論數據定義另一個型別。型別類似於關係型數據庫中Table的概念。
NOTE: 在5.x版本以前可以在一個索引中定義多個型別,6.x之後版本也可以使用,但是不推薦,在7~8.x版本中徹底移除一個索引中建立多個型別
Mapping是ES中的一個很重要的內容,它類似於傳統關係型數據中table的schema,用於定義一個索引(index)中的型別(type)的數據的結構。 在ES中,我們可以手動建立type(相當於table)和mapping(相關與schema),也可以採用預設建立方式。在預設設定下,ES可以根據插入的數據自動地建立type及其mapping。 mapping中主要包括欄位名、欄位數據型別和欄位索引型別
**一個文件是一個可被索引的基礎資訊單元,類似於表中的一條記錄。**比如,你可以擁有某一個員工的文件,也可以擁有某個商品的一個文件。文件以採用了輕量級的數據交換格式JSON(Javascript Object Notation)來表示。
# 0.安裝前準備
- centos7 +
- java 8 +
- elastic 6.8.0+
# 1.在官方網站下載ES
- wget http://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.8.0.tar.gz
# 2.安裝JDK(必須JDK1.8+)
- rpm -ivh jdk-8u181-linux-x64.rpm
/*注意:預設安裝位置 /usr/java/jdk1.8.0_171-amd64*/
# 3.設定環境變數
- vim /etc/profile
在檔案末尾加入:
export JAVA_HOME=/usr/java/jdk1.8.0_171-amd64
export PATH=$PATH:$JAVA_HOME/bin
# 4.過載系統設定
- source /etc/profile
# 1. ES不能以root使用者身份啓動必須建立普通使用者
- a.在linux系統中建立新的組
groupadd es
- b.建立新的使用者es並將es使用者放入es組中
useradd es -g es
- c.修改es使用者密碼
passwd es
# 2.使用普通使用者登錄並上傳安裝包
# 3.解壓縮elasticsearch
- tar -zxvf elasticsearch-6.8.0.tar.gz
# 4.進入ES安裝目錄檢視目錄結構
- bin 可執行的二進制檔案的目錄
- config 組態檔的目錄
- lib 執行時依賴的庫
- logs 執行時日誌檔案
- modules 執行時依賴的模組
- plugins 可以安裝官方以及第三方外掛
# 5.進入bin目錄中啓動ES服務
- ./elasticsearch
- 出現下圖紅色日誌說明啓動成功:
# 6.執行如下命令測試用戶端操作
- curl http://localhost:9200
注意:ES服務預設啓動是受保護的,只允許本地用戶端連線,如果想要通過遠端用戶端存取,必須開啓遠端連線
# 1.開啓ES遠端存取
- vim elasticsearch.yml 將原來network修改爲以下設定:
network.host: 0.0.0.0
# 2.重新啓動啓動ES服務
- [es@localhost bin]$ ./elasticsearch
# 3.重新啓動es出現如下錯誤
- ERROR: [3] bootstrap checks failed
[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535]
[2]: max number of threads [3802] for user [es] is too low, increase to at least [4096]
[3]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
# 4.解決錯誤[1] 使用root使用者修改系統設定
- vim /etc/security/limits.conf 在最後面追加下面 下麪內容
* soft nofile 65536
* hard nofile 65536
* soft nproc 4096
* hard nproc 4096
# 5.登錄重新在檢測設定是否生效
- ulimit -Hn
ulimit -Sn
ulimit -Hu
ulimit -Su
# 6.解決錯誤[2] 使用root使用者修改系統設定
- vim /etc/security/limits.d/20-nproc.conf
啓動ES使用者名稱 soft nproc 4096
# 7.解決錯誤[3] 使用root使用者修改系統設定
- vim /etc/sysctl.conf
vm.max_map_count=655360
# 8.執行如下命令檢測是否生效
- sysctl -p
# 9.退出從新登錄之後重新啓動ES服務
- [es@localhost bin]$ ./elasticsearch
# 10.通過瀏覽器存取ES服務
- http://192.168.102.200:9200