日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ElasticSearch探索之路(一)初识ElasticSearch:特点、应用场景、架构设计、基本概念

發(fā)布時間:2024/4/11 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ElasticSearch探索之路(一)初识ElasticSearch:特点、应用场景、架构设计、基本概念 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

  • 什么是ElasticSearch?
    • Lucene
    • ELK
    • Elasticsearch的特點
    • 應(yīng)用場景
    • 架構(gòu)設(shè)計
  • 基本概念
    • 文檔
    • 類型
    • 索引


什么是ElasticSearch?

Elasticsearch是一個分布式的免費開源搜索和分析引擎,適用于包括文本、數(shù)字、地理空間、結(jié)構(gòu)化和非結(jié)構(gòu)化數(shù)據(jù)等在內(nèi)的所有類型的數(shù)據(jù)。

Elasticsearch在Apache Lucene的基礎(chǔ)上開發(fā)而成。然而,Elasticsearch不僅僅是Lucene,并且也不僅僅只是一個全文搜索引擎。 它可以被下面這樣準確的形容:

  • 一個分布式的實時文檔存儲,每個字段都可以被索引與搜索
  • 一個分布式實時分析搜索引擎
  • 能勝任上百個服務(wù)節(jié)點的擴展,并支持PB級別的結(jié)構(gòu)化或者非結(jié)構(gòu)化數(shù)據(jù)

Lucene

Lucene是一套用于全文索引和搜索的開源程式庫,由Apache軟件基金會支持和提供。Lucene提供了一個簡單卻強大的應(yīng)用程式接口,能夠做全文索引和搜索。但它不是一個完整的全文檢索引擎,而是一個全文檢索引擎的架構(gòu),提供了完整的查詢引擎和索引引擎,部分文本分析引擎(英文與德文兩種西方語言)。

Lucene的目的是為軟件開發(fā)人員提供一個簡單易用的工具包,以方便的在目標系統(tǒng)中實現(xiàn)全文檢索的功能,或者是以此為基礎(chǔ)建立起完整的全文檢索引擎。

在Java開發(fā)環(huán)境里Lucene是一個成熟的免費開源工具。就其本身而言,Lucene是當前以及最近幾年最受歡迎的免費Java信息檢索程序庫。人們經(jīng)常提到信息檢索程序庫,雖然與搜索引擎有關(guān),但不應(yīng)該將信息檢索程序庫搜索引擎相混淆。


ELK

Elastic Stack是一套適用于數(shù)據(jù)采集、擴充、存儲、分析和可視化的免費開源工具。人們通常將Elastic Stack稱為ELK Stack(代指 Elasticsearch、Logstash 和 Kibana)。

Elastic Stack

Logstash是什么?

Logstash 是 Elastic Stack 的核心產(chǎn)品之一,可用來對數(shù)據(jù)進行聚合和處理,并將數(shù)據(jù)發(fā)送到 Elasticsearch。Logstash 是一個開源的服務(wù)器端數(shù)據(jù)處理管道,允許您在將數(shù)據(jù)索引到 Elasticsearch 之前同時從多個來源采集數(shù)據(jù),并對數(shù)據(jù)進行充實和轉(zhuǎn)換。


Kibana是什么?

Kibana 是一款適用于Elasticsearch的數(shù)據(jù)可視化和管理工具,可以提供實時的直方圖、線形圖、餅狀圖和地圖。Kibana同時還包括諸如 Canvas和Elastic Maps等高級應(yīng)用程序

  • Canvas允許用戶基于自身數(shù)據(jù)創(chuàng)建定制的動態(tài)信息圖表,
  • Elastic Maps用來對地理空間數(shù)據(jù)進行可視化。

Kibana

Elasticsearch的特點

  • Elasticsearch 很快。 由于Elasticsearch是在Lucene基礎(chǔ)上構(gòu)建而成的,所以在全文本搜索方面表現(xiàn)十分出色。Elasticsearch同時還是一個近實時的搜索平臺,這意味著從文檔索引操作到文檔變?yōu)榭伤阉鳡顟B(tài)之間的延時很短,一般只有一秒。因此,Elasticsearch 非常適用于對時間有嚴苛要求的用例,例如安全分析和基礎(chǔ)設(shè)施監(jiān)測。
  • Elasticsearch 具有分布式的本質(zhì)特征。Elasticsearch中存儲的文檔分布在不同的容器中,這些容器稱為分片,可以進行復制以提供數(shù)據(jù)冗余副本,以防發(fā)生硬件故障。Elasticsearch的分布式特性使得它可以擴展至數(shù)百臺(甚至數(shù)千臺)服務(wù)器,并處理 PB 量級的數(shù)據(jù)。
  • Elasticsearch 包含一系列廣泛的功能。 除了速度、可擴展性和彈性等優(yōu)勢以外,Elasticsearch 還有大量強大的內(nèi)置功能(例如數(shù)據(jù)匯總和索引生命周期管理),可以方便用戶更加高效地存儲和搜索數(shù)據(jù)。
  • Elastic Stack 簡化了數(shù)據(jù)采集、可視化和報告過程。 通過與 Beats 和 Logstash 進行集成,用戶能夠在向 Elasticsearch 中索引數(shù)據(jù)之前輕松地處理數(shù)據(jù)。同時,Kibana 不僅可針對 Elasticsearch 數(shù)據(jù)提供實時可視化,同時還提供 UI 以便用戶快速訪問應(yīng)用程序性能監(jiān)測 (APM)、日志和基礎(chǔ)設(shè)施指標等數(shù)據(jù)。


應(yīng)用場景

Elasticsearch在速度和可擴展性方面都表現(xiàn)出色,而且還能夠索引多種類型的內(nèi)容,這意味著其可用于多種用例:

  • 應(yīng)用程序搜索
  • 網(wǎng)站搜索
  • 企業(yè)搜索
  • 日志處理和分析
  • 基礎(chǔ)設(shè)施指標和容器監(jiān)測
  • 應(yīng)用程序性能監(jiān)測
  • 地理空間數(shù)據(jù)分析和可視化
  • 安全分析
  • 業(yè)務(wù)分析


架構(gòu)設(shè)計

Elasticsearch架構(gòu)圖
  • Gateway:Elasticsearch用來存儲索引的文件系統(tǒng),支持多種類型。ElasticSearch默認先把索引存儲在內(nèi)存中,然后當內(nèi)存滿的時候,再持久化到Gateway里。當ES集群關(guān)閉或重啟的時候,它就會從Gateway里去讀取索引數(shù)據(jù)。比如LocalFileSystem和HDFS、AS3等。
  • DistributedLucene Directory:Lucene里的一些列索引文件組成的目錄。它負責管理這些索引文件。包括數(shù)據(jù)的讀取、寫入,以及索引的添加和合并等。
  • Mapping:映射解析模塊。
  • Search Moudle:搜索模塊。
  • Index Moudle:索引模塊。
  • Disvcovery:節(jié)點發(fā)現(xiàn)模塊。不同機器上的節(jié)點要組成集群需要進行消息通信,集群內(nèi)部需要選舉master節(jié)點,這些工作都是由Discovery模塊完成。支持多種發(fā)現(xiàn)機制,如 Zen 、EC2、gce、Azure。
  • Scripting:Scripting用來支持在查詢語句中插入javascript、python等腳本語言。
  • 3rd plugins:第三方插件。
  • Transport:傳輸模塊,支持多種傳輸協(xié)議,如 Thrift、memecached、http,默認使用http。
  • JMX:JMX是java的管理框架,用來管理ES應(yīng)用。
  • Java(Netty):java的通信框架。
  • RESTful Style API:提供給用戶的接口,通過RESTful方式來實現(xiàn)API編程。


基本概念

Elasticsearch是一個文檔型數(shù)據(jù)庫,為了方便理解,下面給出其與傳統(tǒng)的關(guān)系型數(shù)據(jù)庫的對比

Relational DBElasticsearch
數(shù)據(jù)庫 Database索引 Index
表 Table類型 Type
行 Rows文檔 Document
列 columns字段 fields
表結(jié)構(gòu) schema映射 mapping


文檔

Elasticsearch是面向文檔的,索引和搜索數(shù)據(jù)的最小單位是文檔,并且使用JSON來作為文檔的序列化格式。每個文檔可以由一個或多個字段組成,類似于關(guān)系型數(shù)據(jù)庫中的一行記錄,在Elasticsearch中,文檔有幾個重要屬性

  • 自我包含:一篇文檔同時包含字段和對應(yīng)的值。
  • 層次型:文檔中還可以包含新的文檔,一個字段的取值也可以包含其他字段和取值。
  • 結(jié)構(gòu)靈活:文檔不依賴預先定義的模式。在關(guān)系型數(shù)據(jù)庫中,要提前定義字段才能使用,在Elasticsearch中,對于字段是非常靈活的,有時候,我們可以忽略該字段,或者動態(tài)的添加一個新的字段。

盡管我們可以隨意的新增或者忽略某個字段,但是,每個字段的類型非常重要,比如一個年齡字段類型,可以是字 串也可以是整形。因為Elasticsearch會保存字段和類型之間的映射及其他的設(shè)置。這種映射具體到每個映射的每種類型,這也是為什么在Elasticsearch中,類型有時候也稱為映射類型。


類型

類型是文檔的邏輯容器,類似于表格是行的容器。在不同的類型中,最好放入不同結(jié)構(gòu)的文檔。(有點類似于關(guān)系型數(shù)據(jù)庫中的表的概念)。

每個類型中對于字段的定義稱為映射。比如name字段映射為string類型。 我們說文檔是無模式的,它們不需要擁有映射中所定義的所有字段,例如我們可能會新增一個映射中不存在的字段,那么Elasticsearch是怎么做的呢?

Elasticsearch會自動的將新字段加入映射,由于不確定這個字段是什么類型,Elasticsearch就會根據(jù)字段的值來推導它的類型,如果這個值是10,那么Elasticsearch會認為它是整形。 但是這種推導也可能會存在問題,如果這里的10實際上是字符串“10”,如果后續(xù)在索引字符串“hello world”,就會因為類型不一致而導致索引失敗。 所以最安全的方式就是在索引數(shù)據(jù)之前,就定義好所需要的映射,這點跟關(guān)系型數(shù)據(jù)庫殊途同歸了,先定義好字段,然后再使用。

映射類型只是將文檔進行邏輯劃分。從物理角度來看,同一索引的文檔都是寫入磁盤,而不考慮它們所屬的映射類型。

注意??:為什么ElasticSearch要在7.X版本去掉type?

在Elasticsearch設(shè)計初期,是直接查考了關(guān)系型數(shù)據(jù)庫的設(shè)計模式,存在了類型(表)的概念。 但是,其搜索引擎是基于Lucene的,這種基因決定了類型是多余的。Lucene的全文檢索功能之所以快,是因為倒序索引的存在。 而這種倒序索引的生成是基于索引的,而并非 類型。多個類型反而會減慢搜索的速度——兩個不同type下的兩個user_name,在ES同一個索引下其實被認為是同一個filed,你必須在兩個不同的type中定義相同的filed映射。否則,不同type中的相同字段名稱就會在處理中出現(xiàn)沖突的情況,導致Lucene處理效率下降。


索引

在Elasticsearch中,索引有兩個含義:

  • 名詞
    • 索引是映射類型的容器,Elasticsearch中的索引是一個非常大的文檔集合,非常類似關(guān)系型數(shù)據(jù)庫中庫的概念。索引存儲了所有映射類型的字段。
  • 動詞
    • 索引一個文檔就是存儲一個文檔到一個索引 (名詞)中以便被檢索和查詢。這非常類似于SQL中的INSERT關(guān)鍵詞,不同的是文檔已存在時,新文檔會替換舊文檔(UPSERT)。

在Elasticsearch中,索引使用了一種稱為倒排索引(即通過查詢詞索引到文檔)的結(jié)構(gòu),它適用于快速的全文搜索。一個倒排索引由文檔中所有不重復詞的列表構(gòu)成,對于其中每個詞,有一個包含它的文檔列表。

總結(jié)

以上是生活随笔為你收集整理的ElasticSearch探索之路(一)初识ElasticSearch:特点、应用场景、架构设计、基本概念的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。