ElasticSearch是基於Lucene的搜索服務,它提供分佈式多用戶的搜索引擎,支持Restful Web接口。
1. 對於es初學者,可能對關係型數據庫mysql更熟悉一些。兩者都能提供存儲和查詢。
MySQL | ElasticSearch |
database | index |
table | type |
row | document |
field | field |
2. ElasticSearch服務的搭建
(1)前提: jdk安裝
wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/7u51-b13/jdk-7u51-linux-x64.tar.gz
vim /etc/profileJAVA_HOME=/opt/soft/jdk1.7.0_51
export JAVA_HOME
PATH=$PATH:$JAVA_HOME/bin
export PATH
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export CLASSPATH
JRE_HOME=$JAVA_HOME/jre
export JRE_HOME
source /etc/profile
驗證設置是否生效 java -version (應該是需要重啓系統才能生效)
(2)安裝ES
https://www.elastic.co/downloads/elasticsearch
下載tar包,解壓縮。裏面有三個文件夾:bin是運行的腳本,config是設置文件,lib是放依賴的包。要裝插件的話就要新建一個plugins的文件夾,把插件放到這個文件夾中。
啓動起來先 bin/elasticsearch start
報UnknownHostException錯誤
解決方案:
vi /etc/hosts
在hosts文件中加入主機的IP zjm_45_12(主機名) 如: 127.0.0.1 localhost zjm_45_12
測試是否正常 curl -i -XGET 'localhost:9200'
證明安裝啓動成功。
安裝插件。
sudo ln -s /opt/soft/elasticsearch-1.3.4/bin/plugin /usr/bin/plugin
plugin -install mobz/elasticsearch-head
http://blog.csdn.net/laigood/article/details/8193758
訪問方式: http://localhost:9200/_plugin/head/
2. bigdesk插件 一個集羣監控工具,可以通過它來查看es集羣的各種狀態,如:cpu、內存使用情況,索引數據、搜索情況,http連接數等。
plugin -install lukas-vlcek/bigdesk
訪問方式: http://localhost:9200/_plugin/bigdesk/
3 suggester插件:
bin/plugin -install de.spinscale/elasticsearch-plugin-suggest/1.3.2-2.0.1
http://maxrocray.iteye.com/blog/1748172
4. ik分詞插件:
https://github.com/medcl/elasticsearch-analysis-ik
http://blog.csdn.net/achilles12345/article/details/40248021
org.apache.http.client.ClientProtocolException類找不到異常,而且索引創建失敗。
注意: 進行maven打包時,我查看源碼,原來作者爲了可以從遠程庫中動態加入新的分詞,就使用了httpclient來加載。然後查看了源碼的pom.xml文件,發現這個分詞器依賴:httpclient-4.3.5、httpcore-4.3.2、log4j-1.2.16、commons-logging-1.1.3、commons-codec-1.6幾個jar包。於是,就將這幾個jar包放在ES_HOMT/lib下,問題解決了
vim config/elasticsearch.yml
5. mmseg分詞插件:
https://github.com/medcl/elasticsearch-analysis-mmseg
分佈式集羣
節點: ElasticSearch的一個實例。集羣由一個或多個節點組成。它們具有相同的cluster_name,協同工作、分享數據和負載。
索引:指向一個或多個分片的“邏輯命名空間”
分片:最小級別的“工作單元”。文檔存儲在分片中並且在分片中被索引,但應用程序不會直接與分片通信而是與索引通信。複製分片是主分片的一個副本,防止硬件故障導致的數據丟失。
兩節點三分片:
橫向擴展三節點三分片。Node3包含了分別來自Node 1和Node 2的一個分,每個節點上的分片將獲得更多的硬件資源(CPU、RAM、I/O)
繼續擴展 複製分片的數量從原來的1增加到2
應對故障 選舉Node2位Master
版本控制
悲觀併發控制
衝突經常發生,訪問區塊化。典型的例子就是在訪問一行數據前鎖定這行,然後確保只有加鎖的那個線程可以修改這行數據。
樂觀併發控制
衝突不經常發生,也不區塊化訪問,然而如果在讀寫過程中數據發生變化,更新將失敗。可以嘗試再次更新或直接反饋給用戶。