首頁  >  文章  >  後端開發  >  Elasticsearch是什麼? Elasticsearch 能夠被用在什麼地方?

Elasticsearch是什麼? Elasticsearch 能夠被用在什麼地方?

零下一度
零下一度原創
2017-06-23 16:10:364052瀏覽
  • Elasticsearch 版本:5.4

  • Elasticsearch快速入門第1篇:Elasticsearch入門

  • ##Elasticsearch快速入門第2篇:Elasticsearch與Kibana安裝

  • Elasticsearch快速入門第3篇:Elasticsearch索引與文件作業

  • ##Elasticsearch快速入門第4篇: Elasticsearch文件查詢
Elasticsearch

 是一個高擴充的開源全文搜尋和分析引擎。它可以快速地、近實時的存儲,搜尋和分析大規模的數據。一般用作底層引擎/技術,為具有複雜搜尋功能和要求的應用提供強有力的支撐。

Elasticsearch 

能夠被用在這些地方:

    假設有一個線上的商店網站,為了讓顧客搜尋到銷售的產品。在這種情況下,可以使用 
  1. Elasticsearch 

    來儲存你的整個產品目錄和庫存,並提供搜尋以及自動給他們一些建議。

  2. 假設想要收集日誌或交易數據,透過分析、挖掘來尋找趨勢,統計,總結或異常。在這種情況下,可以使用 
  3. LogStash

    Elasticsearch/Logstash/Kibana堆疊的一部分)去收集、匯總並解析你的數據,然後透過 LogStash把這些資料遞交給 Elasticsearch 。一旦 Elasticsearch 取得了數據,你就可以進行搜尋並且聚合你感興趣的資訊。

  4. 假設運行一個價格提醒平台,讓價格精明的客戶指定一個規則,如「我有興趣購買一個特定的電子小配件,如果下個月內,有賣家的價格低於$x,我想得到通知」。在這種情況下,你可以把賣家的價格遞交到 
  5. Elasticsearch 

    ,使用反向搜尋(過濾器),將價格變動與客戶查詢進行匹配,一旦發現匹配結果,則通知客戶。

  6. 假設有分析(商業智慧)需求,希望快速調查,分析,視覺化和在大量(考慮百萬或十億筆記錄)的數據中查找一個特設的問題。在這種情況下,你可以使用 
  7. Elasticsearch 

    儲存數據,然後使用 Kibana ( Elasticsearch 堆疊的一部分)建立自訂儀表板,以便視覺化對你重要的數據。另外,你可以使用 Elasticsearch 聚合功能,依靠資料執行複雜的商業智慧查詢。

  8. 對於本教程的其餘部分,會透過 
Elasticsearch 

的啟動和運行過程指導你初步認識它,並展示一些基本的操作,例如:索引,搜尋和修改資料。本教程的結束後,你將會對 Elasticsearch 是什麼以及它的工作原理有了較深的認識。希望你能受到啟發,既能使用它建立複雜的搜尋應用程式又能從你的數據中發掘有用的東西。

基本概念(Basic Concepts)#有一些概念是

Elasticsearch ##的核心從一開始就理解這些概念將大大有助於未來的學習。

近實時(

NRT)

#Elasticsearch 

是一個接近即時的搜尋平台。這意味著從將文件索引的時間到變得可搜尋的時間只有輕微的延遲(通常為1秒)。

叢集(

Cluster)叢集是一個或多個節點(伺服器)的集合,它們聯合起來保存所有的數據,並且可以在所有的節點上進行索引和搜尋操作。叢集由唯一的名稱標識,預設是"elasticsearch"。由於一個節點僅僅可以屬於一個集群,並根據集群名稱加入集群。所以該名字很重要。

不要在不同的環境中使用一樣的叢集名字,否則可能會導致加入錯誤的叢集。例如,你可以分別在開發,過渡,生產環境中使用群集名稱, 

logging-dev , logging-stage 和 logging-prod

 。

注意,只有一個節點的叢集是有效且完美的。也可以擁有多個獨立的集群,每個集群都有自己獨特的集群名稱。

節點(Node)

節點是一個單一的伺服器,是叢集的一部分,儲存數據,並參與叢集的索引和搜尋。和叢集一樣,節點也是透過唯一的名字去區分,預設名字是一個隨機的UUID(Universally Unique IDentifier),當伺服器啟動的時候就會設定到該節點。如果不想使用預設值,你也可以自訂節點的名稱。名稱對管理員來說十分重要,它可以幫助你區分出叢集中的各個伺服器和哪些節點相對應。

節點透過配置叢集的名稱,就可以加入指定的叢集。預設情況下,節點都加入一個叫  elasticsearch 的集群,這意味著如果你在網路中啟動了大量的節點並且假如他們都能互相通訊的話,那麼他們將會被自動的加入一個名字叫  elasticsearch 的集群。

索引(Index)

#索引是具有某種相似特徵的文件的集合。例如,客戶資料索引,產品目錄索引,以及訂單資料索引。索引由名稱(必須全部為小寫)標識,此名稱用於在對文件進行索引、搜尋、更新和刪除操作時使用。在單一叢集中,您可以根據需要定義任意數量的索引。

類型(Type)

一個索引可以定義一個或多個型別。類型是索引的邏輯類別/分割區,你怎麼理解都行。通常,為具有一組公共欄位的文件定義一種類型。例如,一個部落格平台,假如將所有資料儲存在單一索引中。在此索引中,可以定義使用者資料類型,部落格資料類型以及評論資料類型。

文件(document)

文件是可以被索引的基本單位。例如,用一個文件儲存某個客戶的數據,或儲存單一產品的數據,或儲存單一訂單的數據。文檔使用JSON表示。在索引/類型中可以儲存大量文件。值得注意的是,儘管文件本質上是存放在索引中,但實際上是被索引/分配到索引中的一個類型中。

分片和副本(shards & replicas)

一個索引可能儲存海量數據,有可能超過單一節點的硬碟容量。例如,某個索引儲存了10億個文檔,佔用1TB的硬碟空間,單一節點的硬碟有可能不足以儲存那麼大的資料量,就算可以儲存下,但是可能會降低伺服器處理搜尋請求的速度。

為了解決這個問題, elasticsearch 提供了分片功能,即將索引細分。建立索引時,可以簡單地定義所需的分片數。每個分片本身就具備索引的全部功能,可以存放在叢集中的任何一個節點。

分片很重要,主要原因有兩個:

  • 它允許您水平分割/縮放您的內容量

  • #它允許你並行地分發操作到多個節點的分片上,從而可以提升效能或吞吐量。

 碎片分發的機制,以及它的文件如何匯總回到搜尋請求中完全由Elasticsearch管理,並且對使用者來說是透明的。

在網路/雲端環境中,任何時候都可能發生故障,分片會非常有用,並強烈建議使用故障轉移機制,以防止分片/節點離線或消失。為此, elasticsearch 允許您將索引的分片複製一份或多份,也就是所謂的複製分片,或簡寫為副本。

副本很重要,主要原因有兩個:

  • 如果分片/節點發生故障,則可提供高可用性。因此,要注意,副本與其複製的原始/主分片不能分配在同一節點上。

  • 它允許您擴展搜尋量/吞吐量,因為可以對所有副本並行執行搜尋。

總而言之,每個索引可以分成多個分片。每個索引也可以複製零次(意味著沒有副本)或多次。一旦複製,每個索引將具有主分片(複製的原始分片)和副分片(主分片的副本)。可以在建立索引時根據索引定義碎片和副本的數量。建立索引後,您可以隨時動態變更副本數,但不能變更事後的分片數。

預設情況下,每個索引都會被分配5個主分片和1一個複製分片,這表示如果你的叢集中有兩個節點,你的索引將會有5個主分片和5個複製分片,總共有10個分片。

每個elasticsearch 分片是一個Lucene index ,一個Lucene 索引中可以有很多的文檔,截至LUCENE-5843 ,最多2,147,483,519(= Integer.MAX_VALUE - 128) 個文檔. 可以使用_cat/shards api監視分片大小。

總結

1、為什麼不用關係型資料庫做搜尋?因為用資料庫來實現搜索,效能會很差,不能進行分詞搜尋。

2、什麼是全文檢索、倒排索引和Lucene?前人已經總結過了,請參考【手把手教你全文檢索】Apache Lucene初探

3、Elasticsearch的特點

  • 可以分佈式集群,對海量數據進行近實時的處理;

  • 對使用者而言,開箱即用,非常簡單。如果資料量不大,操作不會太複雜;

  • 具有關係型資料庫沒有的功能,例如全文檢索,同義詞處理,相關度排名,複雜資料分析,海量資料的近實時處理;

  • 基於lucene,隱藏了複雜性,提供簡單易用的restful api介面、java api介面

4、 elasticsearch的核心概念

  • Cluster:叢集包含多個節點,每個節點屬於哪個叢集是透過設定來決定的(預設是elasticsearch)

  • Node:叢集中的一個節點,節點預設會自動加入名叫"elasticsearch"的叢集。一個elasticsearch服務就是一個節點,例如一台機器啟動兩個es服務,就有兩個節點。

  • Index:索引,相當於mysql的資料庫,包含一堆有相似結構的文件資料。

  • Type:類型,相當於mysql的表,index中的一個邏輯資料分類。

  • document:文檔,相當於mysql表中的一行記錄,是es中的最小資料單元。

  • shard:分片,單一機器無法儲存大量數據,es可以將一個索引中的資料切分為多個shard,分佈在多台伺服器上儲存。

  • replica:副本,為了防止宕機,shard遺失,所以最小的高可用配置,是2台伺服器。

#

以上是Elasticsearch是什麼? Elasticsearch 能夠被用在什麼地方?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn