1. 程式人生 > >分散式搜尋引擎ElasticSearch 介紹與簡介

分散式搜尋引擎ElasticSearch 介紹與簡介

分散式搜尋引擎ElasticSearch(一) – 介紹與簡介

ElasticSearch是一個基於Lucene構建的開源,分散式,RESTful搜尋引擎;設計用於雲端計算;能夠達到實時搜尋,穩定,可靠,快速。
ElasticSearch在近一年當中,有翻天覆地的變化,據我瞭解:
2012年11月,獲得1000萬美元的融資;
2013年02月,獲得2400萬美元的融資;
2013年初,親愛的GitHub拋棄了Solr,取用了ElasticSearch 來做PB級的搜尋;
聽到以上的訊息,我心潮澎湃,欣喜若狂;口心念叨:有空折騰ElasticSearch才對得住自己啊!

ElasticSearch一些國內外的優秀案例:
Github:“GitHub使用ElasticSearch搜尋20TB的資料,包括13億檔案和1300億行程式碼”

ElasticSearch的一些概念:
叢集 (cluster)
在一個分散式系統裡面,可以通過多個elasticsearch執行例項組成一個叢集,這個叢集裡面有一個節點叫做主節點(master),elasticsearch是去中心化的,所以這裡的主節點是動態選舉出來的,不存在單點故障。
在同一個子網內,只需要在每個節點上設定相同的叢集名,elasticsearch就會自動的把這些叢集名相同的節點組成一個叢集。節點和節點之間通訊以及節點之間的資料分配和平衡全部由elasticsearch自動管理。
在外部看來elasticsearch就是一個整體。
節點(node)
每一個執行例項稱為一個節點,每一個執行例項既可以在同一機器上,也可以在不同的機器上.所謂執行例項,就是一個伺服器程序.在測試環境內,可以在一臺伺服器上執行多個伺服器程序,在生產環境建議每臺伺服器執行一個伺服器程序
索引(index)
這裡的索引是名詞不是動詞,在elasticsearch裡面支援多個索引。類似於關係資料庫裡面每一個伺服器可以支援多個數據庫一樣。在每一索引下面又支援多種型別,類似於關係資料庫裡面的一個數據庫可以有多張表。但是本質上和關係資料庫有很大的區別。這裡暫時可以這麼理解

分片(shards)
把一個索引分解為多個小的索引,每一個小的索引叫做分片。分片後就可以把各個分片分配到不同的節點中

副本(replicas)
每一個分片可以有0到多個副本,每個副本都是分片的完整拷貝,可以用來增加速度,同時也可以提高系統的容錯性,一旦某個節點資料損壞,其他節點可以代替他.

介紹下es的幾個概念:
cluster
代表一個叢集,叢集中有多個節點,其中有一個為主節點,這個主節點是可以通過選舉產生的,主從節點是對於叢集內部來說的。es的一個概念就是去中心化,字面上理解就是無中心節點,這是對於叢集外部來說的,因為從外部來看es叢集,在邏輯上是個整體,你與任何一個節點的通訊和與整個es叢集通訊是等價的。

shards
代表索引分片,es可以把一個完整的索引分成多個分片,這樣的好處是可以把一個大的索引拆分成多個,分佈到不同的節點上。構成分散式搜尋。分片的數量只能在索引建立前指定,並且索引建立後不能更改。

replicas
代表索引副本,es可以設定多個索引的副本,副本的作用一是提高系統的容錯性,當個某個節點某個分片損壞或丟失時可以從副本中恢復。二是提高es的查詢效率,es會自動對搜尋請求進行負載均衡。

recovery
代表資料恢復或叫資料重新分佈,es在有節點加入或退出時會根據機器的負載對索引分片進行重新分配,掛掉的節點重新啟動時也會進行資料恢復。

river
代表es的一個數據源,也是其它儲存方式(如:資料庫)同步資料到es的一個方法。它是以外掛方式存在的一個es服務,通過讀取river中的資料並把它索引到es中,官方的river有couchDB的,RabbitMQ的,Twitter的,Wikipedia的,river這個功能將會在後面的檔案中重點說到。

gateway
代表es索引的持久化儲存方式,es預設是先把索引存放到記憶體中,當記憶體滿了時再持久化到硬碟。當這個es叢集關閉再重新啟動時就會從gateway中讀取索引資料。es支援多種型別的gateway,有本地檔案系統(預設),分散式檔案系統,Hadoop的HDFS和amazon的s3雲端儲存服務。

discovery.zen
代表es的自動發現節點機制,es是一個基於p2p的系統,它先通過廣播尋找存在的節點,再通過多播協議來進行節點之間的通訊,同時也支援點對點的互動。

Transport
代表es內部節點或叢集與客戶端的互動方式,預設內部是使用tcp協議進行互動,同時它支援http協議(json格式)、thrift、servlet、memcached、zeroMQ等的傳輸協議(通過外掛方式整合)。

ElasticSearch核心概念

1)索引(Index)
ElaticSearch將資料存放在一個或多個索引當中。一個索引相當於一個數據庫,裡面存放使用者文件資料。在底層,ElasticSearch實際上還是
使用Lucene完成讀寫資料的操作,ElasticSearch索引是由一個或多個Lucene索引組成,所以ES中的分片或副本實際上就是一個Lucene索引。

2)文件(Document)
文件是ES中主要的實體,所有ES的查詢都是基於存放在ES中文件資源的查詢。每個文件都是由各種域(Field)組成,每個域(Field)有一個名
稱和一個或多個值構成。實際上,從使用者的角度看,一個ES文件就是一個JSON物件。

3)對映(Mapping)
對映用於定義文件域的屬性,這些屬性包括分詞器,欄位型別,儲存型別等。對於沒有定義的欄位型別的屬性,ES可以自動通過其欄位值進行
識別。

4)型別(Type)
ES中每個文件必須有一個型別定義。這裡的型別相當於資料庫當中的表,型別定義了欄位對映(類似資料庫表結構),這樣一來,每個索引可以包含多種文件型別,而每種文件型別定義一種對映關係。

5)節點(Node)
ElasticSearch Server的一個例項稱作一個節點,每個節點都知道所有文件所處的位置並能夠將請求直接轉發給擁有資料的節點。
【號外】:Master Node
叢集啟動後會將某個節點選為Master Node,Master Node主要負責管理叢集中諸如建立或刪除索引、從叢集中新增或刪除節點等叢集範圍的
改變,Master Node不會關心基於文件的改變或檢索。

6)叢集(Cluster)
多個ES節點工作在一起組成一個叢集。ES對於叢集的支援幾乎是無縫的,這也是ES重要的競爭優點之一。

7)分片(Shard)
ES叢集環境下是將索引資料打散存放在多個節點上的,所以每個節點實際存放了ES索引的一部分,而這部分索引本質上就是Lucene的物理索引, 在ES中也稱作“分片”,分片過程是ES自動執行並且對使用者來說是可見,所以分片是基於索引的分片。在現在ES的版本1.3.1,每個索引分片數在建立時指定後不能改變。

8)副本(Replia)
副本就是分片的一個拷貝,不僅能提高自身容災,另外,請求量很大的情況下,副本可以分擔主Shard壓力,承擔查詢功能。副本個數還以在創
建完索引後靈活調整。

9)閘道器(Getway)
ES會將各種叢集狀態資訊、索引配置資訊等全部持久存放在閘道器中。

10)路由(Routing)
ES給每個文件建索引後,通過路由可以算出所查的文件處在哪個分片上,因為在建立索引之初使用公式:shard = hash(routting) % number_of_pr
imary_shards進行文件分配。routing值是一個任意的字串,預設是文件的ID,通過人工指定就可以控制文件存放在哪個shard的位置了。

11)索引別名(Index Alias)
索引別名相當於快捷方式或軟連結,可以指向一個或多個索引,甚至可以指向帶路由的分片。

12)近實時性 near realtime (nrt)
Elasticsearch是一個近實時性的搜尋平臺,所以對於剛建過的索引檔案進行查詢時需要一個輕微的等待時間(通常為1秒)。

Elasticsearch是一個搜尋引擎,建立在Lucene之上,Lucene是一個全文搜尋引擎庫,最先進的,豐富特點的搜尋引擎
庫。

Lucene只是一個庫,要駕馭它,你需要用java整合Lucene,
更糟糕的是,你需要了解資訊搜尋如何工作的,Lucene很複雜。
(PS:不懂Lucene,只會用還不是盲人一個麼)

Elasticsearch使用Lucene,提供全文搜尋,隱藏Lucene的複雜性。

Elasticsearch同時也是一個:

分散式,實時文件儲存,每個域都被索引,可以被搜素。
一個分散式的搜尋引擎,可以實時分析。

可以擴充套件到數百臺伺服器,巨大的資料。整合在一個獨立的伺服器,你可以通過REST風格的API來訪問。

很容易上手,對新手隱藏了複雜的搜尋理論,你很快就掌握它。

當你瞭解越多,你會越能掌握它的功能和特點,可配置,具有彈性,開始學習它!

相關推薦

分散式搜尋引擎ElasticSearch 介紹簡介

分散式搜尋引擎ElasticSearch(一) – 介紹與簡介 ElasticSearch是一個基於Lucene構建的開源,分散式,RESTful搜尋引擎;設計用於雲端計算;能夠達到實時搜尋,穩定,可靠,快速。 ElasticSearch在近一年當中,有翻天

分散式搜尋引擎ElasticSearch——入門知識

什麼是ElasticSearch ElasticSearch是一個基於Lucene的搜尋伺服器。它提供了一個分 布式多使用者能力的全文搜尋引擎,基於RESTful web介面。Elasticsearch是用Java開發 的,並作為Apache許可條款下的開放原始碼釋出,是當前流行的企業級搜尋引擎

分散式之Netty介紹實戰(五)--Netty-RPC框架實戰

基於Netty實現RPC框架 背景:微服務 微服務挑戰之一:微服務間的通訊 如何實現微服務之間的通訊,而不帶來效能瓶頸? RPC構建需要考慮的主要因素 通訊協議 文字協議或二進位制協議(RES

分散式搜尋引擎 Elasticsearch 6.3.1 釋出,Bug 修復

lasticsearch 6.3.1 已釋出,該版本主要是修復了 bug,涉及到認證、Ingest、Java REST 客戶端以及機器學習等方面。具體如下AuthenticationSecurity: fix joining cluster with production l

分散式之Netty介紹實戰(四)--Netty編解碼程式設計實戰

目錄 分散式之Netty介紹與實戰(一)–Java IO與NIO 分散式之Netty介紹與實戰(二)–Netty程式設計實踐 分散式之Netty介紹與實戰(三)–Netty執行緒模型解析 分散式之Netty介紹與實戰(四)–Netty編解碼程式設計實戰

分散式搜尋引擎Elasticsearch PHP類封裝 使用原生api

//官方的 php api寫的雞肋了,下面這個類可以使用 es api 操作.<?php class ElasticSearch { public $index; function __construct($server = 'http://loc

分散式搜尋引擎Elasticsearch(一)

Elasticsearch是一個基於Lucene的開源分散式搜尋引擎,具有分散式多使用者能力,基於RESTful web介面。Elasticsearch是用Java開發的,並作為Apache許可條款下的開放原始碼釋出,是第二流行的企業搜尋引擎。設計用於雲端計算中

Elasticsearch介紹和安裝使用

1.Elasticsearch介紹和安裝 1.1.簡介 1.1.1.Elastic Elastic官網:https://www.elastic.co/cn/ Elastic有一條完整的產品線:Elasticsearch、Kibana、Logstash等,前面說的三

計算機基礎作業系統 計算機系統簡介 計算機基礎知識 計算機的發展史及多道技術 計算機網路知識簡單介紹 Windows系統,Mac系統Linux系統的的安裝與簡介 伺服器硬體基礎 Linux發展史 Linux伺服器遠端登入 Linux常用的150個命令彙總 在終端下寫Python程式碼

第一章:計算機系統簡介 第二章:計算機基礎知識 第三章:計算機的發展史及多道技術 第四章:計算機網路知識簡單介紹 第五章:Windows系統,Mac系統與Linux系統的的安裝與簡介 第六章:伺服器硬體基礎 第七章:Linux發展史 第八章:Linux伺服器遠端登入 第九

ElasticSearch最佳入門實踐(五十七)分散式搜尋引擎核心解密之fetch phase

1、fetch phbase工作流程 (1)coordinate node構建完priority queue之後,就傳送mget請求去所有shard上獲取對應的document (2)各個shard將document返回給coordinate node

ElasticSearch最佳入門實踐(五十六)分散式搜尋引擎核心解密之query phase

1、query phase (1)搜尋請求傳送到某一個coordinate node,構構建一個priority queue,長度以paging操作from和size為準,預設為10 (2)coordinate node將請求轉發到所有shard,每個sha

elasticsearch(七)java 搜尋功能Search Request的介紹使用

目錄 1,首先建立主搜尋請求: 2,對主搜尋請求進行引數設定        前端幾節都是介紹的基於單個文件或著單個文件庫的操作,        本節開始將介紹基於所有或指定的任何個數文件庫的操作的

SVN相關介紹操作簡介

SVN使用手冊 如果開發過程中沒有SVN? 軟體研發過程中,任意一個專案都是由一個團隊完成的,而不能依靠單一個體完成。 在團隊開發過程中,資料資料的共享與同步將成為開發過程中比較突出的問題。 圖一:原始開發管理模式(COPY模式) 缺點: 程式碼管理混亂

ElasticSearch學習總結(二):ES介紹架構說明

本文主要從概念以及架構層面對Elasticsearch做一個簡單的介紹,在介紹ES之前,會先對ES的“發動機”Lucene做一個簡單的介紹 1. Lucene介紹 為了更深入地理解ElasticSearch的工作原理,特別是索引和查詢這兩個過程,理解Lucene的工作原理至關重要。本

Elasticsearch 5.6.1 釋出,分散式搜尋引擎

Elasticsearch 5.6.1 已釋出,ElasticSearch 是一個基於 Lucene 構建的開源,分散式,RESTful 搜尋引擎。設計用於雲端計算中,能夠達到實時搜尋,穩定,可靠,快速,安裝使用方便。支援通過 HTTP 使用 JSON 進行資料索引。

elasticsearch搜尋引擎知識介紹和相關框架

簡介:介紹搜尋的基本概念,市面上主流的搜尋框架elasticSearch和solr等對比          什麼是搜尋:在海量資訊中獲取我們想要的資訊      

ElasticSearch介紹安裝

b16 solr4 false 0.0.0.0 搜索 菜譜 ecc centos import      1. ElasticSearch的介紹 (1)ElasticSearch的趣味歷史   Shay Banon

分散式架構學習之:007--Dubbo 監控中心的介紹簡易監控中心的安裝

Dubbo 監控中心的介紹與簡易監控中心的安裝 一、監控中心的作用      監控中心主要負責統計各服務呼叫次數,呼叫時間等,統計先在記憶體中彙總後每分鐘傳送到中心伺服器,並以報表展示。為服務的監控

20款開源搜尋引擎介紹比較

開放原始碼搜尋引擎為人們學習、研究並掌握搜尋技術提供了極好的途徑與素材,推動了搜尋技術的普及與發展,使越來越多的人開始瞭解並推廣使用搜索技術。使用開源搜尋引擎,可以大大縮短構建搜尋應用的週期,並可根據應用需求打造個性化搜尋應用,甚至構建符合特定需求的搜尋引擎系統。搜尋引擎的開

算法和數據結構~各位排序算法的介紹實現(C#)

index per 歸並 一次 集中 div lag 合並 如何 排序是指將元素集合按照規定的順序排列。通常有兩種排序方法,升序排列和降序排列。例如,對整數集{5,2,7,1}進行升序排列,結果為{1,2,5,7},對其進行降序排列結果為{7,5,2,1}。總的來說,排