天天看點

ElasticSearch(一):概述與Solr比較和入門Elasticsearch概述:Elasticsearch安裝  Elasticsearch基本操作

目錄

Elasticsearch概述:

Elasticsearch是什麼

全文搜尋引擎

 Elasticsearch And Solr

Elasticsearch Or Solr

Elasticsearch 應用案例

Elasticsearch安裝  

下載下傳軟體

安裝軟體

問題解決

Elasticsearch基本操作

RESTful

用戶端安裝

資料格式

Elasticsearch概述:

Elasticsearch是什麼

The Elastic Stack, 包括 Elasticsearch、Kibana、Beats 和 Logstash(也稱為 ELK Stack)。能夠安全可靠地擷取任何來源、任何格式的資料,然後實時地對資料進行搜尋、分析和可視化。Elaticsearch,簡稱為ES, ES是一個開源的高擴充的分布式全文搜尋引擎,是整個Elastic Stack技術棧的核心。它可以近乎實時的存儲、檢索資料;本身擴充性很好,可以擴充到上百台伺服器,處理PB級别的資料。

全文搜尋引擎

Google,百度類的網站搜尋,它們都是根據網頁中的關鍵字生成索引,我們在搜尋的時候輸入關鍵字,它們會将該關鍵字即索引比對到的所有網頁傳回;還有常見的項目中應用日志的搜尋等等。對于這些非結構化的資料文本,關系型資料庫搜尋不是能很好的支援。

一般傳統資料庫,全文檢索都實作的很雞肋,因為一般也沒人用資料庫存文本字段。進行全文檢索需要掃描整個表,如果資料量大的話即使對SQL的文法優化,也收效甚微。建立了索引,但是維護起來也很麻煩,對于 insert 和 update 操作都會重新建構索引。

基于以上原因可以分析得出,在一些生産環境中,使用正常的搜尋方式,性能是非常差的:

  • 搜尋的資料對象是大量的非結構化的文本資料。
  • 檔案記錄量達到數十萬或數百萬個甚至更多。
  • 支援大量基于互動式文本的查詢。
  • 需求非常靈活的全文搜尋查詢。
  • 對高度相關的搜尋結果的有特殊需求,但是沒有可用的關系資料庫可以滿足。
  • 對不同記錄類型、非文本資料操作或安全事務處理的需求相對較少的情況。

為了解決結構化資料搜尋和非結構化資料搜尋性能問題,我們就需要專業,健壯,強大的全文搜尋引擎

這裡說到的全文搜尋引擎指的是目前廣泛應用的主流搜尋引擎。它的工作原理是計算機索引程式通過掃描文章中的每一個詞,對每一個詞建立一個索引,指明該詞在文章中出現的次數和位置,當使用者查詢時,檢索程式就根據事先建立的索引進行查找,并将查找的結果回報給使用者的檢索方式。這個過程類似于通過字典中的檢索字表查字的過程。

 Elasticsearch And Solr

Lucene是Apache軟體基金會Jakarta項目組的一個子項目,提供了一個簡單卻強大的應用程式接口,能夠做全文索引和搜尋。在Java開發環境裡Lucene是一個成熟的免費開源工具。就其本身而言,Lucene是目前以及最近幾年最受歡迎的免費Java資訊檢索程式庫。但Lucene隻是一個提供全文搜尋功能類庫的核心工具包,而真正使用它還需要一個完善的服務架構搭建起來進行應用。

目前市面上流行的搜尋引擎軟體,主流的就兩款:Elasticsearch和Solr,這兩款都是基于Lucene搭建的,可以獨立部署啟動的搜尋引擎服務軟體。由于核心相同,是以兩者除了伺服器安裝、部署、管理、叢集以外,對于資料的操作 修改、添加、儲存、查詢等等都十分類似。

在使用過程中,一般都會将Elasticsearch和Solr這兩個軟體對比,然後進行選型。這兩個搜尋引擎都是流行的,先進的的開源搜尋引擎。它們都是圍繞核心底層搜尋庫 - Lucene建構的 - 但它們又是不同的。像所有東西一樣,每個都有其優點和缺點:

ElasticSearch(一):概述與Solr比較和入門Elasticsearch概述:Elasticsearch安裝  Elasticsearch基本操作

Elasticsearch Or Solr

Elasticsearch和Solr都是開源搜尋引擎,那麼我們在使用時該如何選擇呢?

  1. Google搜尋趨勢結果表明,與 Solr 相比,Elasticsearch具有很大的吸引力,但這并不意味着Apache Solr已經死亡。雖然有些人可能不這麼認為,但Solr仍然是最受歡迎的搜尋引擎之一,擁有強大的社群和開源支援。
  2. 與Solr相比,Elasticsearch易于安裝且非常輕巧。此外,你可以在幾分鐘内安裝并運作Elasticsearch。但是,如果Elasticsearch管理不當,這種易于部署和使用可能會成為一個問題。基于JSON的配置很簡單,但如果要為檔案中的每個配置指定注釋,那麼它不适合您。總的來說,如果你的應用使用的是JSON,那麼Elasticsearch是一個更好的選擇。否則,請使用Solr,因為它的schema.xml和solrconfig.xml都有很好的文檔記錄。
  3. Solr擁有更大,更成熟的使用者,開發者和貢獻者社群。ES雖擁有的規模較小但活躍的使用者社群以及不斷增長的貢獻者社群。

Solr貢獻者和送出者來自許多不同的組織,而Elasticsearch送出者來自單個公司。

  1. Solr更成熟,但ES增長迅速,更穩定。
  2. Solr是一個非常有據可查的産品,具有清晰的示例和API用例場景。 Elasticsearch的文檔組織良好,但它缺乏好的示例和清晰的配置說明。

那麼,到底是Solr還是Elasticsearch?

有時很難找到明确的答案。無論您選擇Solr還是Elasticsearch,首先需要了解正确的用例和未來需求。總結他們的每個屬性。

  • 由于易于使用,Elasticsearch在新開發者中更受歡迎。一個下載下傳和一個指令就可以啟動一切。
  • 如果除了搜尋文本之外還需要它來處理分析查詢,Elasticsearch是更好的選擇
  • 如果需要分布式索引,則需要選擇Elasticsearch。對于需要良好可伸縮性和以及性能分布式環境,Elasticsearch是更好的選擇。
  • Elasticsearch在開源日志管理用例中占據主導地位,許多組織在Elasticsearch中索引它們的日志以使其可搜尋。
  • 如果你喜歡監控和名額,那麼請使用Elasticsearch,因為相對于Solr,Elasticsearch暴露了更多的關鍵名額
  • Elasticsearch 應用案例

  • GitHub: 2013年初,抛棄了Solr,采取Elasticsearch 來做PB級的搜尋。“GitHub使用Elasticsearch搜尋20TB的資料,包括13億檔案和1300億行代碼”。
  • 維基百科:啟動以Elasticsearch為基礎的核心搜尋架構
  • SoundCloud:“SoundCloud使用Elasticsearch為1.8億使用者提供即時而精準的音樂搜尋服務”。
  • 百度:目前廣泛使用Elasticsearch作為文本資料分析,采集百度所有伺服器上的各類名額資料及使用者自定義資料,通過對各種資料進行多元分析展示,輔助定位分析執行個體異常或業務層面異常。目前覆寫百度内部20多個業務線(包括雲分析、網盟、預測、文庫、直達号、錢包、風控等),單叢集最大100台機器,200個ES節點,每天導入30TB+資料。
  • 新浪:使用Elasticsearch分析處理32億條實時日志。
  • 阿裡:使用Elasticsearch建構日志采集和分析體系。
  • Stack Overflow:解決Bug問題的網站,全英文,程式設計人員交流的網站。 Elasticsearch入門

Elasticsearch安裝  

下載下傳軟體

Elasticsearch的官方位址:https://www.elastic.co/cn/

Elasticsearch最新的版本是7.11.2(截止2021.3.10),我們選擇7.8.0版本(最新版本半年前的版本)

下載下傳位址:https://www.elastic.co/cn/downloads/past-releases#elasticsearch

ElasticSearch(一):概述與Solr比較和入門Elasticsearch概述:Elasticsearch安裝  Elasticsearch基本操作

Elasticsearch分為Linux和Windows版本,基于我們主要學習的是Elasticsearch的Java用戶端的使用,是以課程中使用的是安裝較為簡便的Windows版本。

安裝軟體

Windows版的Elasticsearch的安裝很簡單,解壓即安裝完畢,解壓後的Elasticsearch的目錄結構如下

ElasticSearch(一):概述與Solr比較和入門Elasticsearch概述:Elasticsearch安裝  Elasticsearch基本操作
目錄 含義
bin 可執行腳本目錄
config 配置目錄
jdk 内置JDK目錄
lib 類庫
logs 日志目錄
modules 子產品目錄
plugins 插件目錄

解壓後,進入bin檔案目錄,點選elasticsearch.bat檔案啟動ES服務

ElasticSearch(一):概述與Solr比較和入門Elasticsearch概述:Elasticsearch安裝  Elasticsearch基本操作

注意:9300端口為Elasticsearch叢集間元件的通信端口,9200端口為浏覽器通路的http協定RESTful端口。

打開浏覽器(推薦使用谷歌浏覽器),輸入位址:http://localhost:9200,測試結

ElasticSearch(一):概述與Solr比較和入門Elasticsearch概述:Elasticsearch安裝  Elasticsearch基本操作

問題解決

  • Elasticsearch是使用java開發的,且7.8版本的ES需要JDK版本1.8以上,預設安裝包帶有jdk環境,如果系統配置JAVA_HOME,那麼使用系統預設的JDK,如果沒有配置使用自帶的JDK,一般建議使用系統配置的JDK。
  • 輕按兩下啟動視窗閃退,通過路徑通路追蹤錯誤,如果是“空間不足”,請修改config/jvm.options配置檔案

# 設定JVM初始記憶體為1G。此值可以設定與-Xmx相同,以避免每次垃圾回收完成後JVM重新配置設定記憶體

# Xms represents the initial size of total heap space

# 設定JVM最大可用記憶體為1G

# Xmx represents the maximum size of total heap space

-Xms1g

-Xmx1g

Elasticsearch基本操作

RESTful

REST 指的是一組架構限制條件和原則。滿足這些限制條件和原則的應用程式或設計就是 RESTful。Web 應用程式最重要的 REST 原則是,用戶端和伺服器之間的互動在請求之間是無狀态的。從用戶端到伺服器的每個請求都必須包含了解請求所必需的資訊。如果伺服器在請求之間的任何時間點重新開機,用戶端不會得到通知。此外,無狀态請求可以由任何可用伺服器回答,這十分适合雲計算之類的環境。用戶端可以緩存資料以改進性能。

在伺服器端,應用程式狀态和功能可以分為各種資源。資源是一個有趣的概念實體,它向用戶端公開。資源的例子有:應用程式對象、資料庫記錄、算法等等。每個資源都使用 URI (Universal Resource Identifier) 得到一個唯一的位址。所有資源都共享統一的接口,以便在用戶端和伺服器之間傳輸狀态。使用的是标準的 HTTP 方法,比如 GET、PUT、POST 和 DELETE。

在 REST 樣式的 Web 服務中,每個資源都有一個位址。資源本身都是方法調用的目标,方法清單對所有資源都是一樣的。這些方法都是标準方法,包括 HTTP GET、POST、PUT、DELETE,還可能包括 HEAD 和 OPTIONS。簡單的了解就是,如果想要通路網際網路上的資源,就必須向資源所在的伺服器送出請求,請求體中必須包含資源的網絡路徑,以及對資源進行的操作(增删改查)。

用戶端安裝

如果直接通過浏覽器向Elasticsearch伺服器發請求,那麼需要在發送的請求中包含HTTP标準的方法,而HTTP 的大部分特性且僅支援 GET和POST 方法。是以為了能友善地進行用戶端的通路,可以使用Postman軟體

Postman是一款強大的網頁調試工具,提供功能強大的Web API 和 HTTP 請求調試。軟體功能強大,界面簡潔明晰、操作友善快捷,設計得很人性化。Postman中文版能夠發送任何類型的HTTP 請求 (GET, HEAD, POST, PUT..),不僅能夠表單送出,且可以附帶任意類型請求體。

Postman官網:https://www.getpostman.com

Postman下載下傳:https://www.getpostman.com/apps

ElasticSearch(一):概述與Solr比較和入門Elasticsearch概述:Elasticsearch安裝  Elasticsearch基本操作
ElasticSearch(一):概述與Solr比較和入門Elasticsearch概述:Elasticsearch安裝  Elasticsearch基本操作

資料格式

Elasticsearch是面向文檔型資料庫,一條資料在這裡就是一個文檔。為了友善大家了解,我們将Elasticsearch裡存儲文檔資料和關系型資料庫MySQL存儲資料的概念進行一個類比

ElasticSearch(一):概述與Solr比較和入門Elasticsearch概述:Elasticsearch安裝  Elasticsearch基本操作

ES裡的Index可以看做一個庫,而Types相當于表,Documents則相當于表的行。

這裡Types的概念已經被逐漸弱化,Elasticsearch 6.X中,一個index下已經隻能包含一個type,Elasticsearch 7.X中, Type的概念已經被删除了。

6用JSON作為文檔序列化的格式,比如一條使用者資訊:

{

    "name" : "John",

    "sex" : "Male",

    "age" : 25,

    "birthDate": "1990/05/01",

    "about" : "I love to go rock climbing",

    "interests": [ "sports", "music" ]

}

繼續閱讀