1、 ElasticSearch介紹
1.1 介紹
官方網(wǎng)址:https://www.elastic.co/cn/products/elasticsearch
Github:https://github.com/elastic/elasticsearch
總結(jié):
1、elasticsearch是一個(gè)基于Lucene的高擴(kuò)展的分布式搜索服務(wù)器,支持開箱即用。
2、elasticsearch隱藏了Lucene的復(fù)雜性,對(duì)外提供Restful 接口來操作索引、搜索。
突出優(yōu)點(diǎn):
1.擴(kuò)展性好,可部署上百臺(tái)服務(wù)器集群,處理PB級(jí)數(shù)據(jù)。
2.近實(shí)時(shí)的去索引數(shù)據(jù)、搜索數(shù)據(jù)。
es和solr選擇哪個(gè)?
1.如果你公司現(xiàn)在用的solr可以滿足需求就不要換了。
2.如果你公司準(zhǔn)備進(jìn)行全文檢索項(xiàng)目的開發(fā),建議優(yōu)先考慮elasticsearch,因?yàn)橄馟ithub這樣大規(guī)模的搜索都在用它。
1.2原理與應(yīng)用
1.2.1索引結(jié)構(gòu)
下圖是ElasticSearch的索引結(jié)構(gòu),下邊黑色部分是物理結(jié)構(gòu),上邊橙色部分是邏輯結(jié)構(gòu),邏輯結(jié)構(gòu)也是為了更好的去描述ElasticSearch的工作原理及去使用物理結(jié)構(gòu)中的索引文件
邏輯結(jié)構(gòu)部分是一個(gè)倒排索引表:
1、將要搜索的文檔內(nèi)容分詞,所有不重復(fù)的詞組成分詞列表。
2、將搜索的文檔最終以Document方式存儲(chǔ)起來。
3、每個(gè)詞和docment都有關(guān)聯(lián)。
如下:
現(xiàn)在,如果我們想搜索quick brown,我們只需要查找包含每個(gè)詞條的文檔:
兩個(gè)文檔都匹配,但是第一個(gè)文檔比第二個(gè)匹配度更高。如果我們使用僅計(jì)算匹配詞條數(shù)量的簡單 相似性算法 ,那么,我們可以說,對(duì)于我們查詢的相關(guān)性來講,第一個(gè)文檔比第二個(gè)文檔更佳。
2 ElasticaSearch安裝
2.1 安裝
安裝配置:
1、新版本要求至少jdk1.8以上。
2、支持tar、zip、rpm等多種安裝方式。
在windows下開發(fā)建議使用ZIP安裝方式。
3、支持docker方式安裝
詳細(xì)參見:https://www.elastic.co/guide/en/elasticsearch/reference/current/install-elasticsearch.html
下載ES: Elasticsearch 6.2.1
https://www.elastic.co/downloads/past-releases
解壓 elasticsearch-6.2.1.zip
bin:腳本目錄,包括:啟動(dòng)、停止等可執(zhí)行腳本
config:配置文件目錄
data:索引目錄,存放索引文件的地方
logs:日志目錄
modules:模塊目錄,包括了es的功能模塊
plugins :插件目錄,es支持插件機(jī)制
2.2 配置文件
2.2.1 三個(gè)配置文件
ES的配置文件的地址根據(jù)安裝形式的不同而不同:
使用zip、tar安裝,配置文件的地址在安裝目錄的config下。
使用RPM安裝,配置文件在/etc/elasticsearch下。
使用MSI安裝,配置文件的地址在安裝目錄的config下,并且會(huì)自動(dòng)將config目錄地址寫入環(huán)境變量ES_PATH_CONF。
我們使用的zip包安裝,配置文件在ES安裝目錄的config下。
配置文件如下:
elasticsearch.yml : 用于配置Elasticsearch運(yùn)行參數(shù) jvm.options : 用于配置Elasticsearch JVM設(shè)置log4j2.properties: 用于配置Elasticsearch日志
2.2.2 elasticsearch.yml
配置格式是YAML,可以采用如下兩種方式:
方式1:層次方式
path: data: /var/lib/elasticsearch logs: /var/log/elasticsearch
方式2:屬性方式
path.data: /var/lib/elasticsearch path.logs: /var/log/elasticsearch
例子如下:
cluster.name: xuecheng? #配置elasticsearch的集群名稱,默認(rèn)是elasticsearch。建議修改成一個(gè)有意義的名稱。node.name: xc_node_1? #節(jié)點(diǎn)名,通常一臺(tái)物理服務(wù)器就是一個(gè)節(jié)點(diǎn),es會(huì)默認(rèn)隨機(jī)指定一個(gè)名字,建議指定一個(gè)有意義的名稱,方便管理network.host: 0.0.0.0? #綁定ip地址http.port: 9200? #暴露的http端口transport.tcp.port: 9300? #內(nèi)部端口node.master: true? #主節(jié)點(diǎn)node.data: true? #數(shù)據(jù)節(jié)點(diǎn)discovery.zen.ping.unicast.hosts: ["0.0.0.0:9300", "0.0.0.0:9301", "0.0.0.0:9302"]? #設(shè)置集群中master節(jié)點(diǎn)的初始列表discovery.zen.minimum_master_nodes: 1? #主結(jié)點(diǎn)數(shù)量的最少值 ,此值的公式為:(master_eligible_nodes / 2) + 1 ,比如:有3個(gè)符合要求的主結(jié)點(diǎn),那么這里要設(shè)置為2。bootstrap.memory_lock: false? #內(nèi)存的鎖定只給es用node.max_local_storage_nodes: 1 #單機(jī)允許的最大存儲(chǔ)結(jié)點(diǎn)數(shù),通常單機(jī)啟動(dòng)一個(gè)結(jié)點(diǎn)建議設(shè)置為1,開發(fā)環(huán)境如果單機(jī)啟動(dòng)多個(gè)節(jié)點(diǎn)可設(shè)置大于1path.data: D:\ElasticSearch\elasticsearch‐6.2.1\data? #索引目錄path.logs: D:\ElasticSearch\elasticsearch‐6.2.1\logs? ? #日志http.cors.enabled: true #? 跨域設(shè)置http.cors.allow‐origin: /.*/
2.2.3 jvm.options
設(shè)置最小及最大的JVM堆內(nèi)存大小:
在jvm.options中設(shè)置 -Xms和-Xmx:
1) 兩個(gè)值設(shè)置為相等
2) 將Xmx設(shè)置為不超過物理內(nèi)存的一半
2.2.4 log4j2.properties
日志文件設(shè)置,ES使用log4j,注意日志級(jí)別的配置。
2.3 啟動(dòng)ES
進(jìn)入bin目錄,在cmd下運(yùn)行:elasticsearch.bat
瀏覽器輸入:http://localhost:9200
顯示結(jié)果如下(配置不同內(nèi)容則不同)說明ES啟動(dòng)成功:
2.4 head插件安裝
head插件是ES的一個(gè)可視化管理插件,用來監(jiān)視ES的狀態(tài),并通過head客戶端和ES服務(wù)進(jìn)行交互,比如創(chuàng)建映射、創(chuàng)建索引等,head的項(xiàng)目地址在https://github.com/mobz/elasticsearch-head。
從ES6.0開始,head插件支持使得node.js運(yùn)行。
1、安裝node.js
2、下載head并運(yùn)行
git clonegit://github.com/mobz/elasticsearch-head.git
cd elasticsearch-head
npm install
npm run start open
HTTP://本地主機(jī):9100 /
3、運(yùn)行