ElasticSearch 入門

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

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

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

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

接下來,我們就通過下面這個簡單介紹,開啟 es 之旅吧~

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

image

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

1.Lucene

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

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

早在 2005 年,Lucene 就升級為 Apache 頂級開源項目。它的作者是 Doug Cutting,有的人可能沒聽過這這個人,不過你肯定聽過他的另一個大名鼎鼎的作品 Hadoop。

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

Lucene 主要有如下特點:

  • 簡單
  • 跨語言
  • 強大的搜索引擎
  • 索引速度快
  • 索引文件兼容不同平臺

2.ElasticSearch

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

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

整體上來說,ElasticSearch 有三大功能:

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

ElasticSearch 的主要特點:

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

3.安裝

3.1 單節(jié)點安裝

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

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

image

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

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

啟動方式:

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

image

看到 started 表示啟動成功。

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

image

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

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

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

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

image

Es 支持矩陣:

3.2 HEAD 插件安裝

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

這里介紹兩種安裝思路。

3.2.1 瀏覽器插件安裝

Chrome 直接在 App Store 搜索 Elasticsearch-head,點擊安裝即可。

image

公眾號江南一點雨后臺回復(fù) Elasticsearch-head,可以下載離線安裝包。

3.2.2 下載插件安裝

四個步驟

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

啟動成功,頁面如下:

image

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

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

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

配置完成后,重啟 es,此時 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,代表兩個從機。

分別對其進行配置。

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"]

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

image

3.4 Kibana 安裝

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

安裝步驟如下:

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

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

4.ElasticSearch 核心概念介紹

4.1 ElasticSearch 十大核心概念

4.1.1 集群(Cluster)

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

一個集群有一個名字,這個名字是集群的唯一標(biāo)識,該名字成為 cluster name,默認的集群名稱是 elasticsearch,具有相同名稱的節(jié)點才會組成一個集群。

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

cluster.name: javaboy-es

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

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

4.1.2 節(jié)點(Node)

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

4.1.3 索引(Index)

索引可以從兩方面來理解:

名詞

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

動詞

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

4.1.4 類型(Type)

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

4.1.5 文檔(Document)

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

4.1.6 分片(Shards)

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

默認情況下,一個索引會自動創(chuàng)建 1 個分片,并且為每一個分片創(chuàng)建一個副本。

4.1.7 副本(Replicas)

副本也就是備份,是對主分片的一個備份。

4.1.8 Settings

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

4.1.9 Mapping

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

4.1.10 Analyzer

字段分詞方式的定義。

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

關(guān)系型數(shù)據(jù)庫 ElasticSearch
數(shù)據(jù)庫 索引
類型
文檔
字段
表結(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://
索引 全文索引

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

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

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

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