Elasticsearch(一):概述

1昙啄、Elasticsearch是什么

elasticsearch是一款開(kāi)源的分布式搜索穆役、存儲(chǔ)、分析引擎梳凛;它目前的時(shí)效為近實(shí)時(shí)性的耿币。Solar也是頂級(jí)的開(kāi)源搜索引擎,也是基于lucene韧拒;elasticsearch與Solar相比安裝更加簡(jiǎn)單淹接,對(duì)于一些復(fù)雜的搜索支持更好,在大數(shù)據(jù)量下叛溢,elasticsearch的性能更好塑悼,現(xiàn)在被很多公司大量的使用。我們可以看到數(shù)據(jù)庫(kù)搜索引擎排名已經(jīng)很高了https://db-engines.com/en/ranking

image
image

<article data-author="Wxeditor" style="margin: 5px auto; padding: 0px; max-width: 100%; overflow-wrap: break-word !important; box-sizing: border-box !important;">

2楷掉、Elasticsearch發(fā)展

2.1 Elasticsarch發(fā)展史

2004年厢蒜,shay banon基于lucene開(kāi)發(fā)了compass。

2010年烹植,shay banon重構(gòu)了compass斑鸦,取名為elasticsearch,使其支持分布式和水平擴(kuò)展草雕。

2012年巷屿,Elasticsearch BV公司被創(chuàng)建,圍繞Elasticsearch及相關(guān)軟件提供商業(yè)服務(wù)和產(chǎn)品墩虹。

2015年嘱巾,Elasticsearch公司更名為Elastic.

Lucene 是一個(gè)高性能的搜索引擎庫(kù),它提供索引數(shù)據(jù)和搜索數(shù)據(jù)的功能诫钓,內(nèi)部非常復(fù)雜旬昭,elasticsearch利用了lucene的高性能,封裝了它的復(fù)雜性菌湃,對(duì)外可以提供rest接口稳懒,不同語(yǔ)言的應(yīng)用都可以調(diào)用。

軼事:

2004年,shay banon失業(yè)了场梆,準(zhǔn)備給他廚師老婆做一個(gè)食譜的搜索引擎墅冷,如果直接使用Lucene很難,所以他把使用lucene抽象了一下或油,并開(kāi)源了寞忿,開(kāi)發(fā)者可以直接在程序里使用compass來(lái)進(jìn)行搜索,2010年的時(shí)候顶岸,它已經(jīng)重構(gòu)了compass腔彰,取名為elasticsearch,支持分布式和水平擴(kuò)展辖佣。

2.2 Elasticsarch重要版本

Elastic的版本維護(hù)政策維護(hù)當(dāng)前主要版本的最新次要版本霹抛,以及上一個(gè)主要版本的最新次要版本,例如7.10.2卷谈,7主版本杯拐,10為次要版本,2為修復(fù)bug的版本世蔗。它的具體的版本政策可以查看(https://www.elastic.co/cn/support/eol)端逼,elasticsearch主要版本特性如下:

image

在實(shí)際生產(chǎn)中推薦采用7.x,官方做了很多優(yōu)化污淋,性能更好顶滩,功能更強(qiáng)大。

3寸爆、Elasticsearch應(yīng)用場(chǎng)景

Elastic公司圍繞著elasticsearch構(gòu)建一整套生態(tài)系統(tǒng)礁鲁,適用了很多熱門(mén)的使用場(chǎng)景

3.1 Elastic生態(tài)圈

image

2013年logstash被收購(gòu),同年kibana加入elastic公司赁豆,后續(xù)它陸續(xù)收購(gòu)了beat仅醇、prealert(機(jī)器學(xué)習(xí))等公司,將其納入到elastic生態(tài)圈歌憨。

  1. beats,輕量數(shù)據(jù)采集器墩衙,可收集文件务嫡、網(wǎng)絡(luò)包等數(shù)據(jù),它們安裝在目標(biāo)服務(wù)器作為代理漆改,轉(zhuǎn)發(fā)數(shù)據(jù)到logstash或elasticsearch上心铃。
  2. X-Pack,商業(yè)套件挫剑,提供了一些增值服務(wù)去扣,有些組件也開(kāi)源了。

3.2 使用場(chǎng)景

  1. 網(wǎng)站搜索

    設(shè)計(jì)了豐富的api來(lái)提供搜索服務(wù)樊破,github愉棱、stackoverflow等網(wǎng)站的搜索都是基于elasticsearch唆铐。

  2. 日志

    將分散的日志,集中化存儲(chǔ)到elasticsearch上奔滑。

    日志管理一般分為:日志收集艾岂,格式化,檢索朋其,風(fēng)險(xiǎn)告警王浴。

  3. 數(shù)據(jù)庫(kù)同步

    通過(guò)某種同步機(jī)制將數(shù)據(jù)庫(kù)某個(gè)表的數(shù)據(jù)同步到elasticsearch上,然后提供搜索服務(wù)梅猿。

  4. 指標(biāo)分析

    提供了分組查詢(xún)氓辣、top查詢(xún)、排序袱蚓、相關(guān)度打分钞啸,可以進(jìn)行數(shù)據(jù)分析

4、Elasticsearch整體架構(gòu)

4.1 整體架構(gòu)圖

image

如上圖所示癞松,elasticsearch整體的功能劃分:

  1. restful api爽撒,表示提供rest風(fēng)格的api來(lái)實(shí)現(xiàn)編程何管理

  2. Transport, 網(wǎng)絡(luò)傳輸模塊,支持http响蓉,thrift等主流協(xié)議硕勿,默認(rèn)tcp

  3. Scripting,腳本語(yǔ)言枫甲,支持使用groovy源武、painless等腳本語(yǔ)言

  4. 3rd plugin,支持第三方插件

  5. Index module 索引文檔想幻、search module粱栖,搜索文檔

  6. River,支持接入其它數(shù)據(jù)源

  7. Jmx脏毯,監(jiān)控

  8. Discovery闹究,服務(wù)發(fā)現(xiàn)模塊

  9. Lucene directory,底層存儲(chǔ)基于lucene實(shí)現(xiàn)

  10. Gateway食店,可以持久化到本地或者其它文件系統(tǒng)

4.2 基本概念

開(kāi)發(fā)視角:

image
  1. 文檔

    可搜索的最小單位渣淤,我們向elasticsearch存儲(chǔ)的一條數(shù)據(jù),就是一個(gè)文檔吉嫩。每個(gè)文檔都有一個(gè)id价认,可以自己指定,也可以讓elasticsearch生成自娩。

  2. 索引

    索引是文檔的容器用踩,一類(lèi)文檔的集合。可以對(duì)文檔元數(shù)據(jù)進(jìn)行定義脐彩,比如名稱(chēng)碎乃、類(lèi)型等。在物理上丁屎,索引的數(shù)據(jù)分布在分片上荠锭。

  3. Type

    在7.0以前,一個(gè)索引可以定義多個(gè)type晨川,7.0版本后证九,type廢除了,只有一個(gè)type為“_doc”共虑。

系統(tǒng)視角:

image
  1. 集群

    一個(gè)elasticsearch集群由多個(gè)節(jié)點(diǎn)構(gòu)成愧怜,它的分布式架構(gòu)支持存儲(chǔ)水平擴(kuò)容,并且依靠副本可用性也很高妈拌。

  2. 節(jié)點(diǎn)

    一個(gè)節(jié)點(diǎn)就是一個(gè)elasticsearch實(shí)例拥坛,即一個(gè)java進(jìn)程。節(jié)點(diǎn)根據(jù)功能可以劃分多種角色尘分,比如主節(jié)點(diǎn)猜惋、數(shù)據(jù)節(jié)點(diǎn)、協(xié)調(diào)節(jié)點(diǎn)培愁、ingest節(jié)點(diǎn)等著摔。默認(rèn)一個(gè)節(jié)點(diǎn)這些角色都承擔(dān)。

  3. 分片

    為了解決數(shù)據(jù)水平擴(kuò)展定续,通過(guò)分片將數(shù)據(jù)分散到集群的節(jié)點(diǎn)上谍咆。一個(gè)索引分片數(shù)的設(shè)計(jì)需要提前做好評(píng)估,太大和太小都不好私股,具體怎么評(píng)估摹察,后續(xù)的文章會(huì)來(lái)探討。

<article data-author="Wxeditor" style="margin: 5px auto; padding: 0px; max-width: 100%; overflow-wrap: break-word !important; box-sizing: border-box !important;">

5倡鲸、Elasticsearch集群搭建

5.1 Elasticsearch安裝

  1. 安裝java8環(huán)境供嚎,7.0后的elasticsearch版本,內(nèi)置了java環(huán)境

  2. 下載elasticsearch二進(jìn)制文件(7.10.2)

    https://www.elastic.co/cn/downloads/past-releases/elasticsearch-7-10-2

  3. 啟動(dòng)elasticsearch集群(3節(jié)點(diǎn))

    啟動(dòng)命令:

 bin/elasticsearch -E node.name=node0 -E cluster.name=mylocalcluster -E path.data=node0_data
 bin/elasticsearch -E node.name=node1 -E cluster.name=mylocalcluster -E path.data=node1_data
 bin/elasticsearch -E node.name=node2 -E cluster.name=mylocalcluster -E path.data=node2_data
  1. 接口查看狀態(tài)

    節(jié)點(diǎn)的狀態(tài)(http://localhost:9200

  {
  "name" : "node0",  //節(jié)點(diǎn)名稱(chēng)
  "cluster_name" : "mylocalcluster", //集群名稱(chēng)
  "cluster_uuid" : "nTdmburYQPmB2Ppmw0UhiQ",
  "version" : {
    "number" : "7.10.2",
    "build_flavor" : "default",
    "build_type" : "zip",
    "build_hash" : "747e1cc71def077253878a59143c1f785afa92b9",
    "build_date" : "2021-01-13T00:42:12.435326Z",
    "build_snapshot" : false,
    "lucene_version" : "8.7.0",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

集群的狀態(tài)(http://localhost:9200/_cat/nodes

  127.0.0.1 31 78 11    cdhilmrstw * node0 //*表示是主節(jié)點(diǎn)
  127.0.0.1 33 78 10    cdhilmrstw - node1
  127.0.0.1 33 78  9    cdhilmrstw - node2

集群的健康狀態(tài)(http://localhost:9200/_cat/nodes

{
  "cluster_name": "mylocalcluster",
  "status": "green", //集群狀態(tài)
  "timed_out": false,
  "number_of_nodes": 3,//節(jié)點(diǎn)數(shù)
  "number_of_data_nodes": 3,//數(shù)據(jù)節(jié)點(diǎn)數(shù)
  "active_primary_shards": 0,
  "active_shards": 0,
  "relocating_shards": 0,
  "initializing_shards": 0,
  "unassigned_shards": 0,
  "delayed_unassigned_shards": 0,
  "number_of_pending_tasks": 0,
  "number_of_in_flight_fetch": 0,
  "task_max_waiting_in_queue_millis": 0,
  "active_shards_percent_as_number": 100.0
}
  1. 安裝kibana來(lái)管理elasticsearch

    下載kibana安裝包

    https://www.elastic.co/cn/downloads/past-releases#kibana

    配置

    config\kibana.yml配置指向elastisearch集群

    elasticsearch.hosts: ["http://localhost:9200","http://localhost:9201","http://localhost:9202"] i18n.locale: "zh-CN"

    啟動(dòng)kibana峭状,執(zhí)行命令bin/kibana

    進(jìn)入管理界面

    http://localhost:5601

    導(dǎo)入樣本數(shù)據(jù)(可選克滴,可以自己驗(yàn)證功能)

    image
  2. Kibana查看elasticsearch索引和數(shù)據(jù)

  3. 安裝cerebro可視化的查看集群狀態(tài)

image

5.2 Elasticsarch發(fā)展史

添加文檔

POST user/_doc
{
  "name" : "xiao ming",
  "age" : 12
}

注意post(自動(dòng)生成id)、put(可以指定Id宁炫。如果id已經(jīng)存在報(bào)錯(cuò))效果是不一樣的

查詢(xún)文檔

GET /user/_doc/2

更多的api可以查看官方文檔:

https://www.elastic.co/guide/en/elasticsearch/reference/7.1/docs.html

6偿曙、總結(jié)

本篇文章先是介紹了elasticsearch的發(fā)展歷史以及重大版本說(shuō)明氮凝,知道7.x版本以后已經(jīng)不支持自定義type了羔巢。接著介紹了elascitc公司生態(tài)圈以及elasticsearch的使用場(chǎng)景,知道了elasticsearch主要用于全文檢索、日志等熱門(mén)的場(chǎng)景中竿秆。然后通過(guò)一個(gè)elasticsearch集群搭建和相關(guān)組件的安裝启摄,快速上手了下文檔基礎(chǔ)操作。最后對(duì)elasticsearch整體功能幽钢、集群歉备、節(jié)點(diǎn)、分片等主要概念做了一些簡(jiǎn)單說(shuō)明匪燕,這樣我們對(duì)elasticsearch有了大概的了解蕾羊。后面的文章會(huì)對(duì)elasticsearch的功能和核心原理進(jìn)行進(jìn)一步探討。

image

關(guān)注IT巔峰技術(shù)帽驯,私信作者龟再,獲取以下2021全球架構(gòu)師峰會(huì)PDF資料。

image
image.gif
image
image.gif
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末尼变,一起剝皮案震驚了整個(gè)濱河市利凑,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌嫌术,老刑警劉巖哀澈,帶你破解...
    沈念sama閱讀 221,430評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異度气,居然都是意外死亡割按,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,406評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門(mén)蚯嫌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)哲虾,“玉大人,你說(shuō)我怎么就攤上這事择示∈眨” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 167,834評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵栅盲,是天一觀(guān)的道長(zhǎng)汪诉。 經(jīng)常有香客問(wèn)我,道長(zhǎng)谈秫,這世上最難降的妖魔是什么扒寄? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,543評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮拟烫,結(jié)果婚禮上该编,老公的妹妹穿的比我還像新娘。我一直安慰自己硕淑,他們只是感情好课竣,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,547評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布嘉赎。 她就那樣靜靜地躺著,像睡著了一般于樟。 火紅的嫁衣襯著肌膚如雪公条。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,196評(píng)論 1 308
  • 那天迂曲,我揣著相機(jī)與錄音靶橱,去河邊找鬼。 笑死路捧,一個(gè)胖子當(dāng)著我的面吹牛关霸,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播杰扫,決...
    沈念sama閱讀 40,776評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼谒拴,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了涉波?” 一聲冷哼從身側(cè)響起英上,我...
    開(kāi)封第一講書(shū)人閱讀 39,671評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎啤覆,沒(méi)想到半個(gè)月后苍日,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,221評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡窗声,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,303評(píng)論 3 340
  • 正文 我和宋清朗相戀三年相恃,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片笨觅。...
    茶點(diǎn)故事閱讀 40,444評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡拦耐,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出见剩,到底是詐尸還是另有隱情杀糯,我是刑警寧澤,帶...
    沈念sama閱讀 36,134評(píng)論 5 350
  • 正文 年R本政府宣布苍苞,位于F島的核電站固翰,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏羹呵。R本人自食惡果不足惜骂际,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,810評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望冈欢。 院中可真熱鬧歉铝,春花似錦、人聲如沸凑耻。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,285評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至先匪,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間弃衍,已是汗流浹背呀非。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,399評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留镜盯,地道東北人岸裙。 一個(gè)月前我還...
    沈念sama閱讀 48,837評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像速缆,于是被迫代替她去往敵國(guó)和親降允。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,455評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容