ElasticSearch 入門

@[toc]
松哥前段時(shí)間連載的 Spring Security 基本上告一段落了,接下來(lái)我會(huì)抽空將這個(gè)系列的教程整理成一個(gè)系列分發(fā)給大家。最近一段時(shí)間自己也稍微休息了一下,不寫教程的日子雖然可以早早睡覺(jué)但是又會(huì)感到無(wú)聊,得找點(diǎn)事情做,感覺(jué)是時(shí)候開(kāi)啟一波新的旅程了~

2018 年國(guó)慶節(jié)期間 ElasticSearch 母公司上市,那個(gè)時(shí)候我就想寫一個(gè) es 教程,可惜后來(lái)爛尾了,這事在我心里老是一個(gè)疙瘩。最近剛好有一個(gè)時(shí)間空檔,就想著能不能把這個(gè)系列給完結(jié)了。

不同于之前的教程,這次的教程我打算出一個(gè)視頻版+圖文混合版的。視頻為主,圖文為輔。視頻我會(huì)上傳到百度網(wǎng)盤,文末會(huì)有文章對(duì)應(yīng)的視頻下載鏈接。

ElasticSearch 目前也算是非?;鹆?,站內(nèi)搜索、日志分析都會(huì)用到它,而且還可以直接當(dāng)成 NoSQL 數(shù)據(jù)庫(kù)來(lái)使用。

接下來(lái),我們就通過(guò)下面這個(gè)簡(jiǎn)單介紹,開(kāi)啟 es 之旅吧~

松哥針對(duì)本文內(nèi)容錄制了一個(gè)視頻,如下:

image

視頻下載鏈接:https://pan.baidu.com/s/1bIvtBv9OvTEXJUyZRtajgQ 提取碼: pm94

1.Lucene

Lucene 是一個(gè)開(kāi)源、免費(fèi)、高性能、純 Java 編寫的全文檢索引擎,可以算作是開(kāi)源領(lǐng)域最好的全文檢索工具包。

在實(shí)際開(kāi)發(fā)中,Lucene 幾乎適用于任何需要全文檢索的場(chǎng)景,所以 Lucene 先后發(fā)展出好多語(yǔ)言版本,例如 C++、C#、Python 等。

早在 2005 年,Lucene 就升級(jí)為 Apache 頂級(jí)開(kāi)源項(xiàng)目。它的作者是 Doug Cutting,有的人可能沒(méi)聽(tīng)過(guò)這這個(gè)人,不過(guò)你肯定聽(tīng)過(guò)他的另一個(gè)大名鼎鼎的作品 Hadoop。

不過(guò)需要注意的是,Lucene 只是一個(gè)工具包,并非一個(gè)完整的搜索引擎,開(kāi)發(fā)者可以基于 Lucene 來(lái)開(kāi)發(fā)完整的搜索引擎。比較著名的有 Solr、ElasticSearch,不過(guò)在分布式和大數(shù)據(jù)環(huán)境下,ElasticSearch 更勝一籌。

Lucene 主要有如下特點(diǎn):

  • 簡(jiǎn)單
  • 跨語(yǔ)言
  • 強(qiáng)大的搜索引擎
  • 索引速度快
  • 索引文件兼容不同平臺(tái)

2.ElasticSearch

ElasticSearch 是一個(gè)分布式、可擴(kuò)展、近實(shí)時(shí)性的高性能搜索與數(shù)據(jù)分析引擎。ElasticSearch 基于 Java 編寫,通過(guò)進(jìn)一步封裝 Lucene,將搜索的復(fù)雜性屏蔽起來(lái),開(kāi)發(fā)者只需要一套簡(jiǎn)單的 RESTful API 就可以操作全文檢索。

ElasticSearch 在分布式環(huán)境下表現(xiàn)優(yōu)異,這也是它比較受歡迎的原因之一。它支持 PB 級(jí)別的結(jié)構(gòu)化或非結(jié)構(gòu)化海量數(shù)據(jù)處理

整體上來(lái)說(shuō),ElasticSearch 有三大功能:

  • 數(shù)據(jù)搜集
  • 數(shù)據(jù)分析
  • 數(shù)據(jù)存儲(chǔ)

ElasticSearch 的主要特點(diǎn):

  1. 分布式文件存儲(chǔ)。
  2. 實(shí)時(shí)分析的分布式搜索引擎。
  3. 高可拓展性。
  4. 可插拔的插件支持。

3.安裝

3.1 單節(jié)點(diǎn)安裝

首先打開(kāi) Es 官網(wǎng),找到 Elasticsearch:

然后點(diǎn)擊下載按鈕,選擇合適的版本直接下載即可。

image

將下載的文件解壓,解壓后的目錄含義如下:

目錄 含義
modules 依賴模塊目錄
lib 第三方依賴庫(kù)
logs 輸出日志目錄
plugins 插件目錄
bin 可執(zhí)行文件目錄
config 配置文件目錄
data 數(shù)據(jù)存儲(chǔ)目錄

啟動(dòng)方式:

進(jìn)入到 bin 目錄下,直接執(zhí)行 ./elasticsearch 啟動(dòng)即可。

image

看到 started 表示啟動(dòng)成功。

默認(rèn)監(jiān)聽(tīng)的端口是 9200,所以瀏覽器直接輸入 localhost:9200 可以查看節(jié)點(diǎn)信息。

image

節(jié)點(diǎn)的名字以及集群(默認(rèn)是 elasticsearch)的名字,我們都可以自定義配置。

打開(kāi) config/elasticsearch.yml 文件,可以配置集群名稱以及節(jié)點(diǎn)名稱。配置方式如下:

cluster.name: javaboy-es
node.name: master

配置完成后,保存配置文件,并重啟 es。重啟成功后,刷新瀏覽器 localhost:9200 頁(yè)面,就可以看到最新信息。

image

Es 支持矩陣:

3.2 HEAD 插件安裝

Elasticsearch-head 插件,可以通過(guò)可視化的方式查看集群信息。

這里介紹兩種安裝思路。

3.2.1 瀏覽器插件安裝

Chrome 直接在 App Store 搜索 Elasticsearch-head,點(diǎn)擊安裝即可。

image

公眾號(hào)江南一點(diǎn)雨后臺(tái)回復(fù) Elasticsearch-head,可以下載離線安裝包。

3.2.2 下載插件安裝

四個(gè)步驟

  • git clone git://github.com/mobz/elasticsearch-head.git
  • cd elasticsearch-head
  • npm install
  • npm run start

啟動(dòng)成功,頁(yè)面如下:

image

注意,此時(shí)看不到集群數(shù)據(jù)。原因在于這里通過(guò)跨域的方式請(qǐng)求集群數(shù)據(jù)的,默認(rèn)情況下,集群不支持跨域,所以這里就看不到集群數(shù)據(jù)。

解決辦法如下,修改 es 的 config/elasticsearch.yml 配置文件,添加如下內(nèi)容,使之支持跨域:

http.cors.enabled: true
http.cors.allow-origin: "*"

配置完成后,重啟 es,此時(shí) head 上就有數(shù)據(jù)了。

image

3.3 分布式安裝

假設(shè):

  • 一主二從
  • master 的端口是 9200,slave 端口分別是 9201 和 9202

首先修改 master 的 config/elasticsearch.yml 配置文件:

node.master: true
network.host: 127.0.0.1

配置完成后,重啟 master。

將 es 的壓縮包解壓兩份,分別命名為 slave01 和 slave02,代表兩個(gè)從機(jī)。

分別對(duì)其進(jìn)行配置。

slave01/config/elasticsearch.yml:

# 集群名稱必須保持一致
cluster.name: javaboy-es
node.name: slave01
network.host: 127.0.0.1
http.port: 9201
discovery.zen.ping.unicast.hosts: ["127.0.0.1"]

slave02/config/elasticsearch.yml:

# 集群名稱必須保持一致
cluster.name: javaboy-es
node.name: slave02
network.host: 127.0.0.1
http.port: 9202
discovery.zen.ping.unicast.hosts: ["127.0.0.1"]

然后分別啟動(dòng) slave01 和 slave02。啟動(dòng)后,可以在 head 插件上查看集群信息。

image

3.4 Kibana 安裝

Kibana 是一個(gè) Elastic 公司推出的一個(gè)針對(duì) es 的分析以及數(shù)據(jù)可視化平臺(tái),可以搜索、查看存放在 es 中的數(shù)據(jù)。

安裝步驟如下:

  1. 下載 Kibana:https://www.elastic.co/cn/downloads/kibana
  2. 解壓
  3. 配置 es 的地址信息(可選,如果 es 是默認(rèn)地址以及端口,可以不用配置,具體的配置文件是 config/kibana.yml)
  4. 執(zhí)行 ./bin/kibana 文件啟動(dòng)
  5. localhost:5601
image

Kibana 安裝好之后,首次打開(kāi)時(shí),可以選擇初始化 es 提供的測(cè)試數(shù)據(jù),也可以不使用。

4.ElasticSearch 核心概念介紹

4.1 ElasticSearch 十大核心概念

4.1.1 集群(Cluster)

一個(gè)或者多個(gè)安裝了 es 節(jié)點(diǎn)的服務(wù)器組織在一起,就是集群,這些節(jié)點(diǎn)共同持有數(shù)據(jù),共同提供搜索服務(wù)。

一個(gè)集群有一個(gè)名字,這個(gè)名字是集群的唯一標(biāo)識(shí),該名字成為 cluster name,默認(rèn)的集群名稱是 elasticsearch,具有相同名稱的節(jié)點(diǎn)才會(huì)組成一個(gè)集群。

可以在 config/elasticsearch.yml 文件中配置集群名稱:

cluster.name: javaboy-es

在集群中,節(jié)點(diǎn)的狀態(tài)有三種:綠色、黃色、紅色:

  • 綠色:節(jié)點(diǎn)運(yùn)行狀態(tài)為健康狀態(tài)。所有的主分片、副本分片都可以正常工作。
  • 黃色:表示節(jié)點(diǎn)的運(yùn)行狀態(tài)為警告狀態(tài),所有的主分片目前都可以直接運(yùn)行,但是至少有一個(gè)副本分片是不能正常工作的。
  • 紅色:表示集群無(wú)法正常工作。

4.1.2 節(jié)點(diǎn)(Node)

集群中的一個(gè)服務(wù)器就是一個(gè)節(jié)點(diǎn),節(jié)點(diǎn)中會(huì)存儲(chǔ)數(shù)據(jù),同時(shí)參與集群的索引以及搜索功能。一個(gè)節(jié)點(diǎn)想要加入一個(gè)集群,只需要配置一下集群名稱即可。默認(rèn)情況下,如果我們啟動(dòng)了多個(gè)節(jié)點(diǎn),多個(gè)節(jié)點(diǎn)還能夠互相發(fā)現(xiàn)彼此,那么它們會(huì)自動(dòng)組成一個(gè)集群,這是 es 默認(rèn)提供的,但是這種方式并不可靠,有可能會(huì)發(fā)生腦裂現(xiàn)象。所以在實(shí)際使用中,建議一定手動(dòng)配置一下集群信息。

4.1.3 索引(Index)

索引可以從兩方面來(lái)理解:

名詞

具有相似特征文檔的集合。

動(dòng)詞

索引數(shù)據(jù)以及對(duì)數(shù)據(jù)進(jìn)行索引操作。

4.1.4 類型(Type)

類型是索引上的邏輯分類或者分區(qū)。在 es6 之前,一個(gè)索引中可以有多個(gè)類型,從 es7 開(kāi)始,一個(gè)索引中,只能有一個(gè)類型。在 es6.x 中,依然保持了兼容,依然支持單 index 多個(gè) type 結(jié)構(gòu),但是已經(jīng)不建議這么使用。

4.1.5 文檔(Document)

一個(gè)可以被索引的數(shù)據(jù)單元。例如一個(gè)用戶的文檔、一個(gè)產(chǎn)品的文檔等等。文檔都是 JSON 格式的。

4.1.6 分片(Shards)

索引都是存儲(chǔ)在節(jié)點(diǎn)上的,但是受限于節(jié)點(diǎn)的空間大小以及數(shù)據(jù)處理能力,單個(gè)節(jié)點(diǎn)的處理效果可能不理想,此時(shí)我們可以對(duì)索引進(jìn)行分片。當(dāng)我們創(chuàng)建一個(gè)索引的時(shí)候,就需要指定分片的數(shù)量。每個(gè)分片本身也是一個(gè)功能完善并且獨(dú)立的索引。

默認(rèn)情況下,一個(gè)索引會(huì)自動(dòng)創(chuàng)建 1 個(gè)分片,并且為每一個(gè)分片創(chuàng)建一個(gè)副本。

4.1.7 副本(Replicas)

副本也就是備份,是對(duì)主分片的一個(gè)備份。

4.1.8 Settings

集群中對(duì)索引的定義信息,例如索引的分片數(shù)、副本數(shù)等等。

4.1.9 Mapping

Mapping 保存了定義索引字段的存儲(chǔ)類型、分詞方式、是否存儲(chǔ)等信息。

4.1.10 Analyzer

字段分詞方式的定義。

4.2 ElasticSearch Vs 關(guān)系型數(shù)據(jù)庫(kù)

關(guān)系型數(shù)據(jù)庫(kù) ElasticSearch
數(shù)據(jù)庫(kù) 索引
類型
文檔
字段
表結(jié)構(gòu) 映射(Mapping)
SQL DSL(Domain Specific Language)
Select * from xxx GET http://
update xxx set xx=xxx PUT http://
Delete xxx DELETE http://
索引 全文索引

這篇文章其實(shí)是松哥所錄制的 Es 視頻教程的筆記,筆記相對(duì)簡(jiǎn)陋一些,小伙伴們也可以參考視頻,視頻下載鏈接:https://pan.baidu.com/s/1bIvtBv9OvTEXJUyZRtajgQ 提取碼: pm94

image
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、ElasticSearch概述 1. 概念闡述 ES(ElasticSearch)是一款非常強(qiáng)大的開(kāi)源搜索引擎...
    WardWu閱讀 1,618評(píng)論 0 0
  • ElasticSearch是一個(gè)基于Lucene的搜索服務(wù)器。它提供了一個(gè)分布式多用戶能力的全文搜索引擎,基于Re...
    GeekerLou閱讀 2,026評(píng)論 0 8
  • 我的Elasticsearch系列文章,逐漸更新中,歡迎關(guān)注 0A.關(guān)于Elasticsearch及實(shí)例應(yīng)用 00...
    普通人劉大閱讀 522評(píng)論 0 0
  • 1 簡(jiǎn)介 Elasticsearch是一個(gè)基于Lucene庫(kù)的搜索引擎。它提供了一個(gè)分布式、支持多租戶的全文搜索引...
    JavaEdge閱讀 360評(píng)論 0 2
  • 1.ElasticSearch的簡(jiǎn)介 Elasticsearch的特點(diǎn) 1)可以作為一個(gè)大型分布式集群(數(shù)百臺(tái)服務(wù)...
    __元昊__閱讀 31,191評(píng)論 3 30

友情鏈接更多精彩內(nèi)容