elasticsearch入門之核心概念篇

1、elasticsearch是什麼

elasticsearch是一個基於Lucene的搜索服務器,採用Java語言編寫,使用Lucene構建索引、提供搜索功能,並做爲Apache許可條款下的開發源碼發佈,是當前流行的企業級搜索引擎。其實Lucene的功能已經很強大了,爲何還要畫蛇添足的開發elasticsearch呢?緣由是由於Lucene只是一個由Java語言編寫的庫,對不適用Java語言的開發人員並不友好。因此elasticsearch在Lucene上作了不少改進,提供了多種語言的接口。Lucene之於elasticsearch堪比發動機之於汽車,elasticsearch底層使用的仍然是Lucene的api,Lucene專一於底層搜索的建設,elasticsearch專一於企業應用。elasticsearch的目標是讓全文搜索變得簡單,開發者能夠經過簡單明瞭的restful api輕鬆實現搜索功能,而沒必要去面對Lucene的複雜性。node

 

2、elasticsearch架構

Gateway是elasticsearch用來存儲索引的文件系統,支持多種文件類型,Local FileSystem是本地的文件系統,Shared FileSystem是共享存儲,也可使用Hadoop的HDFS分佈式存儲,也能夠存儲在Amazon的s3服務器上。sql

Gateway上層是一個分佈式的Lucene框架,elasticsearch的底層Api是由Lucene提供的,每個elasticsearch節點上都有一個Lucene節點的支持。數據庫

Lucene之上是elasticsearch的模塊,包括索引模塊、搜索模塊、映射解析模塊等。river至關於第三方插件,用於導入第三方數據源,在2.x以後已經再也不使用。編程

elasticsearch模塊之上是Discovery和Scripting和第三方插件。Discovery是elasticsearch的節點發現模塊,不一樣機器上的elasticsearch節點要組成集羣須要進行消息通訊,集羣內部須要選舉master節點,這些工做都是Discovery模塊完成的。Scripting用來支持Python、JavaScript等多種語言的,能夠在查詢語句中嵌入,使用script語句性能稍低。elasticsearch也支持多種第三方插件。api

再上層是elasticsearch的傳輸模塊和JMX。傳輸模塊支持Thrift、Memcached、Http,默認使用HTTP傳輸。JMX是Java的管理框架,用來管理elasticsearch應用安全

最上層是elasticsearch提供給用戶的接口,能夠經過restful api和elasticsearch集羣進行交互。服務器

 

3、elasticsearch優勢

  1. 分佈式:Elasticsearch橫向擴展很是方便靈活,當規模較小時可使用小規模的集羣,隨着數據的增加,須要更大的容量和更高的性能,此時只需增長更多的節點,Elasticsearch的自動發現機制會識別新增的節點並從新平衡分配數據。
  2. 全文檢索:Apache Lucene是一個用Java編寫的高性能的功能齊全的信息檢索庫,Elasticsearch在底層使用Lucene來提供強大的全文檢索,提供任何開源產品的能力。自帶多語言支持、強大的查詢語言、地理位置支持,上下文感知的建議、自動完成和搜索片斷。
  3. 近實時搜索和分析:數據進入Elasticsearch後,可達到實時搜索。Elasticsearch還支持聚合分析操做
  4. 高可用:高可用主要體如今容錯方面,Elasticsearch集羣會自動發現新的或失敗的節點,重組和從新平衡數據,確保數據是安全和可訪問的。
  5. 模式自由:Elasticsearch的動態mapping機制能夠自動的檢測數據的結構和類型,建立索引,並使數據可搜索。
  6. Restful Api:Elasticsearch是Api驅動,幾乎任何操做均可以用一個簡單的Restful Api使用JSON基於HTTP請求實現,客戶端也可以使用多種編程語言。
  7. 應用場景豐富:站內搜索、nosql數據庫(Elasticsearch在讀寫性能上因爲MongoDB,同時也支持地理位置查詢)、日誌分析(日誌分析平臺ELK,可以對日誌進行集中的收集、存儲、搜索、分析、監控以及可視化)等。

 

4、Elasticsearch核心概念[1]

來源:https://www.jianshu.com/p/cec1b8b3698drestful

集羣(cluster)

表明一個集羣,集羣中有多個節點node,其中一個爲主節點,這個主節點能夠經過選舉產生的,主節點是對於集羣內部來講的。ES的一個概念就是去中心化,字面上理解就是無中心化節點,這是對於集羣外部來講的,由於從外部來看ES集羣,在邏輯上是一個總體,你與任何一個節點的通訊和整個ES集羣通訊是等價的網絡

一個集羣就是由一個或者多個節點組織在一塊兒,它們共同持有整個的數據,並在一塊兒提供索引和搜索功能。一個集羣由一個惟一的名字標識。一個節點只能經過指定某個集羣的名字,來加入這個集羣。架構

節點(node)

一個節點是集羣中的一個服務器,做爲集羣的一部分,存儲數據,參與集羣的索引和搜索功能。一個節點也是由一個名字來標識的。默認狀況下,這個名字是一個隨機的漫威漫畫角色的名字,這個名字會在啓動的時候賦予節點,這個名字對於管理工做來講挺重要的,由於在這個管理過程當中,要肯定網絡中的哪些服務器對應於Elasticsearch集羣中的哪些節點。

索引(index)

ES將它的數據存儲在一個或多個索引(index)中。相似sql中的數據庫。能夠向索引中寫入文檔或者讀取文檔,並經過ES內部使用Lucene將數據索引或從索引中檢索數據

一個索引就是一個擁有幾分類似特徵的文檔的集合(相似於咱們在數據庫中的庫結構),一個索引由一個名字來標識,而且在咱們要對對這個索引中的文檔進行索引,搜索,更新和刪除的時候,都要使用到這個名字。

文檔(document)

文檔是ES中主要的實體。對全部使用ES的案例來講,他們最終均可以終結爲對文檔的搜索。文檔由字段構成。

映射(mapping)

全部文檔寫進索引以前都會先進行分析,若是將輸入的文本分割爲詞條,哪些詞條又會被過濾,這種行爲叫作映射(mapping)。通常由用戶本身定義規則

類型(type)

每一個文檔都有與之對應的類型定義。這容許用戶在一個索引中存儲多種文檔類型,併爲不一樣文檔類型提供不一樣的映射

分片(shards)

shards表明索引分片,ES能夠把一個完整的索引分紅多個分片,這樣的好處是能夠把一個大的索引拆分紅多個,分佈到不一樣的節點上。構成分佈式搜索。分片的數量只能在索引建立前指定,而且索引建立後不能更改。
分片有兩個好處,一是能夠水平擴展,另外一個是能夠併發提升性能。

副本(replicas)

表明索引副本,ES能夠設置多個索引副本,副本的做用一是提升系統的容錯性,實現高可用(HA),當某個節點某個分片損壞或丟失時能夠從副本中恢復;二是提升ES的查詢效率,ES會自動對搜索請求進行負載均衡。

 

5、對比RDBMS

Elasticsearch能夠當作是一個數據庫,只是和關係型數據庫比起來數據格式和功能不同而已

相關文章
相關標籤/搜索