ElasticSearch
1. 什麼是RestFul
REST : 表現層狀态轉化(Representational State Transfer),如果一個架構符合REST原則,就稱它為 RESTful 架構風格。
資源: 所謂"資源",就是網絡上的一個實體,或者說是網絡上的一個具體資訊
表現層 :我們把"資源"具體呈現出來的形式,叫做它的"表現層"(Representation)。
狀态轉化(State Transfer):如果用戶端想要操作伺服器,必須通過某種手段,讓伺服器端發生"狀态轉 化"(State Transfer)。而這種轉化是建立在表現層之上的,是以就是"表現層狀态轉化"。REST原則就是指一個URL代表一個唯一資源,并且通過HTTP協定裡面四個動詞:GET、POST、PUT、DELETE對應四種伺服器端的基本操作: GET用來擷取資源,POST用來添加資源(也可以用于更新資源),PUT用來更新資源,DELETE用來删除資源。
2. 什麼是全文檢索
全文檢索是計算機程式通過掃描文章中的每一個詞,對每一個詞建立一個索引,指明該詞在文章中出現的次數和位置。當使用者查詢時根據建立的索引查找,類似于通過字典的檢索字表查字的過程。
全文檢索(Full-Text Retrieval(檢索))以文本作為檢索對象,找出含有指定詞彙的文本。全面、準确和快速是衡量全文檢索系統的關鍵名額。
關于全文檢索,我們要知道:1. 隻處理文本。
2. 不處理語義。
3. 搜尋時英文不區分大小寫。
4. 結果清單有相關度排序。
3. 什麼是ElasticSearch
ElasticSearch 簡稱 ES ,是基于Apache Lucene建構的開源搜尋引擎,是目前流行的企業級搜尋引擎。Lucene本身就可以被認為迄今為止性能最好的一款開源搜尋引擎工具包,但是lucene的API相對複雜,需要深厚的搜尋理論。很難內建到實際的應用中去。同時ES是采用java語言編寫,提供了簡單易用的RestFul API,開發者可以使用其簡單的RestFul API,開發相關的搜尋功能,進而避免lucene的複雜性。
4. ES的誕生
多年前,一個叫做Shay Banon的剛結婚不久的失業開發者,由于妻子要去倫敦學習廚師,他便跟着也去了。在他找工作的過程中,為了給妻子建構一個食譜的搜尋引擎,他開始建構一個早期版本的Lucene。
直接基于Lucene工作會比較困難,是以Shay開始抽象Lucene代碼以便Java程式員可以在應用中添加搜尋功能。他釋出了他的第一個開源項目,叫做“Compass”。
後來Shay找到一份工作,這份工作處在高性能和記憶體資料網格的分布式環境中,是以高性能的、實時的、分布式的搜尋引擎也是理所當然需要的。然後他決定重寫Compass庫使其成為一個獨立的服務叫做Elasticsearch。
第一個公開版本出現在2010年2月,在那之後Elasticsearch已經成為Github上最受歡迎的項目之一,代碼貢獻者超過300人。一家主營Elasticsearch的公司就此成立,他們一邊提供商業支援一邊開發新功能,不過Elasticsearch将永遠開源且對所有人可用。
Shay的妻子依舊等待着她的食譜搜尋……
5. ES的應用場景
Es主要以輕量級JSON作為資料存儲格式,這點與MongoDB有點類似,但它在讀寫性能上優于 MongoDB 。同時也支援地理位置查詢 ,還友善地理位置和文本混合查詢 。 以及在統計、日志類資料存儲和分析、可視化這方面是引領者。
國外:
Wikipedia(維基百科)使用ES提供全文搜尋并高亮關鍵字、StackOverflow(IT問答網站)結合全文搜尋與地理位置查詢、Github使用Elasticsearch檢索1300億行的代碼。
國内:
百度(在雲分析、網盟、預測、文庫、錢包、風控等業務上都應用了ES,單叢集每天導入30TB+資料, 總共每天60TB+)、新浪 、阿裡巴巴、騰訊等公司均有對ES的使用。
使用比較廣泛的平台ELK(ElasticSearch, Logstash, Kibana)。
6. ES的安裝
安裝前準備
centos7 +
java 8 +
elastic 6.2.4+
在官方網站下載下傳ES
wget http://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.4.1.tar.gz
安裝JDK(必須JDK1.8+)
rpm -ivh jdk-8u181-linux-x64.rpm
注意:預設安裝位置 /usr/java/jdk1.8.0_171-amd64
配置環境變量
vim /etc/profile
在檔案末尾加入:
export JAVA_HOME=/usr/java/jdk1.8.0_171-amd64
export PATH= P A T H : PATH: PATH:JAVA_HOME/bin
重載系統配置
source /etc/profile
安裝elasticsearche
tar -zxvf elasticsearch-6.4.1.tar.gz
elasticsearche的目錄結構
bin 可執行的二進制檔案的目錄
config 配置檔案的目錄
lib 運作時依賴的庫
logs modules 運作時日志檔案
plugins es中提供的插件
運作es服務
在bin目錄中執行 ./elasticsearch
注意:root使用者啟動[2018-09-19T14:50:04,029][WARN ][o.e.b.ElasticsearchUncaughtExceptionHandler] [] uncaught exception in thread [main]org.elasticsearch.bootstrap.StartupException: java.lang.RuntimeException: can not run elasticsearch as root
- 不能以root使用者身份啟動
a.在linux系統中建立新的組
groupadd es
b.建立新的使用者es并将es使用者放入es組中
useradd es -g es
c.修改es使用者密碼
passwd es
d.将root使用者解壓的檔案移動到es使用者目錄中
mv /root/elasticsearch-6.2.4 /home/es/
f.改變檔案的所有者
chown -R es:es 目前es的安裝目錄(這裡是:/home/es/elasticsearch)
登入es使用者啟動ES
./elasticsearch 啟動ES
測試ES是否啟動成功
在指令終端中執行: curl http://localhost:9200 出現以下資訊:
{
“name” : “xQK1cwT”,
“cluster_name” : “elasticsearch”,
“cluster_uuid” : “t7IYk7LKQ0mXcyyrdFWpLg”,
“version” : {
“number” : “6.2.4”,
“build_hash” : “ccec39f”,
“build_date” : “2018-04-12T20:37:28.497551Z”,
“build_snapshot” : false,
“lucene_version” : “7.2.1”,
“minimum_wire_compatibility_version” : “5.6.0”,
“minimum_index_compatibility_version” : “5.0.0”
},
“tagline” : “You Know, for Search”
}
開啟ES遠端通路
vim elasticsearch.yml 将原來network修改為以下配置:
network.host: 0.0.0.0
- 啟動時錯誤解決方案
a.重新啟動es出現如下錯誤
**ERROR: bootstrap checks failed[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]**
解決方案:
# 切換到root使用者修改
vim /etc/security/limits.conf
# 在最後面追加下面内容
* soft nofile 65536
* hard nofile 65536
* soft nproc 4096
* hard nproc 4096
# 退出重新登入檢測配置是否生效:
ulimit -Hn
ulimit -Sn
ulimit -Hu
ulimit -Su
b.重新啟動出現如下錯誤
**ERROR: max number of threads [3802] for user [chenyn] is too low,increase to at least [4096]**
解決方案:
#進入limits.d目錄下修改配置檔案。
vim /etc/security/limits.d/20-nproc.conf
# 修改為 啟動ES使用者名 soft nproc 4096
c.重新啟動出現如下錯誤
**ERROR: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]**
解決方案:
vim /etc/sysctl.conf
vm.max_map_count=655360
#執行以下指令生效:
sysctl -p
關閉網絡防火牆
systemctl stop firewalld
systemctl disable firewalld
外部浏覽器通路即可
http://es的主機名:9200 出現如下資訊說明安裝成功:
{
“name” : “xQK1cwT”,
“cluster_name” : “elasticsearch”,
“cluster_uuid” : “t7IYk7LKQ0mXcyyrdFWpLg”,
“version” : {
“number” : “6.2.4”,
“build_hash” : “ccec39f”,
“build_date” : “2018-04-12T20:37:28.497551Z”,
“build_snapshot” : false,
“lucene_version” : “7.2.1”,
“minimum_wire_compatibility_version” : “5.6.0”,
“minimum_index_compatibility_version” : “5.0.0”
},
“tagline” : “You Know, for Search”
}