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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Elasticsearch介绍

發布時間:2025/3/21 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Elasticsearch介绍 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄:

  • Elasticsearch介紹
  • es功能
  • es特點
  • elasticsearch基本概念
    • 概念說明
    • 索引(Index)[數據庫]
    • 類型(Type)[表]
    • 文檔(Document)
    • 節點(Node)
    • 分片(Shard)
    • 主分片 與 副分片
  • elasticsearch增刪改查原理
    • 增加原理
    • 刪除(Delete)文檔
    • 更新(Update)
    • 讀操作(Read):查詢過程

Elasticsearch介紹

什么是 Elasticsearch ?

  • 使用 java 語言開發的一套開源的全文搜索引擎,建立在全文搜索引擎 Apache Lucene(TM)基礎上的搜索引擎
  • 用于搜索、日志管理、安全分析、指標分析、業務分析、應用性能監控等多個領域
  • 底層基于 Lucene 開源庫開發,提供 restAPI,可以被任何語言調用
  • 支持分布式部署,可水平擴展
  • 更新迭代快、社區活躍、文檔豐富

es功能

  • 分布式的搜索引擎和數據分析引擎
  • 數據分析:電商網站,最近7天牙膏銷量排行前十商家(舉例)
  • 全文檢索,結構化檢索,數據分析
  • 全文檢索:我想搜索商品名稱包含牙膏的商品,select * from products where product_name like “%牙膏%”
  • 結構化檢索:我想搜索商品分類為日化用品的商品都有哪些,select * from products where category_id=’日化用品’
  • 部分匹配、自動完成、搜索糾錯、搜索推薦
  • 數據分析:我們分析每一個商品分類下有多少個商品,select category_id,count(*) from products group by category_id
  • 對海量數據進行實時的處理
  • es特點

  • 可以作為一個大型分布式集群(數百臺服務器)技術,處理PB級數據,服務大公司;也可以運行在單機上,服務小公司
  • Elasticsearch不是什么新技術,主要是將全文檢索、數據分析以及分布式技術,合并在了一起,才形成了獨一無二的ES;
  • lucene(全文檢索),商用的數據分析軟件(也是有的),分布式數據庫(mycat)
  • 對用戶而言,是開箱即用的,非常簡單,作為中小型的應用,直接3分鐘部署一下ES,就可以作為生產環境的系統來使用了,數據量不大,操作不是太復雜
  • 數據庫的功能面對很多領域是不夠用的(事務,還有各種聯機事務型的操作)
  • 特殊的功能,比如全文檢索,同義詞處理,相關度排名,復雜數據分析,海量數據的近實時處理
  • Elasticsearch作為傳統數據庫的一個補充,提供了數據庫所不不能提供的很多功能
  • elasticsearch基本概念

    概念說明

  • ElasticSearch 是分布式數據庫,允許多臺服務器協同工作,每臺服務器可以運行多個實例
  • 單個實例稱為一個節點(node)
  • 一組節點構成一個集群(cluster)
  • 分片是底層的工作單元,文檔保存在分片內,分片又被分配到集群內的各個節點里,每個分片僅保存全部數據的一部分
  • 索引(Index)[數據庫]

    1. ES將數據存儲于一個或多個索引中,索引是具有類似特性的文檔的集合。

    2. 類比傳統的關系型數據庫領域來說,索引相當于SQL中的一個數據庫,或者一個數據存儲方案(schema)。

    3. 索引由其名稱(必須為全小寫字符)進行標識,并通過引用此名稱完成文檔的創建、搜索、更新及刪除操作。

    4. 一個ES集群中可以按需創建任意數目的索引。

    類型(Type)[表]

    1. 類型是索引內部的邏輯分區(category/partition),然而其意義完全取決于用戶需求。

    2. 因此,一個索引內部可定義一個或多個類型(type)。

    3. 一般來說,類型就是為那些擁有相同的域的文檔做的預定義。

    4. 例如,在索引中,可以定義一個用于存儲用戶數據的類型,一個存儲日志數據的類型,以及一個存儲評論數據的類型。

    5. 類比傳統的關系型數據庫領域來說,類型相當于“表”。

    文檔(Document)

    1. 文檔是索引和搜索的原子單位,它是包含了一個或多個域(Field)的容器,基于JSON格式進行表示。

    2. 文檔由一個或多個域組成,每個域擁有一個名字及一個或多個值,有多個值的域通常稱為“多值域”。

    3. 每個文檔可以存儲不同的域集,但同一類型下的文檔至應該有某種程度上的相似之處。

    節點(Node)

    1. 一個運行中的 Elasticsearch 實例稱為一個節點

    2. 而集群是由一個或者多個擁有相同cluster.name配置的節點組成, 它們共同承擔數據和負載的壓力。

    3. ES集群中的節點有三種不同的類型:

    1)主節點:負責管理集群范圍內的所有變更,例如增加、刪除索引,或者增加、刪除節點等。 主節點并不需要涉及到文檔級別的變更和搜索等操作。可以通過屬性node.master進行設置
    2)數據節點:存儲數據和其對應的倒排索引,默認每一個節點都是數據節點(包括主節點),可以通過node.data屬性進行設置
    3)協調節點:如果node.master和node.data屬性均為false,則此節點稱為協調節點,用來響應客戶請求,均衡每個節點的負載

    分片(Shard)

    1. 一個索引中的數據保存在多個分片中,相當于水平分表。

    2. 一個分片便是一個Lucene 的實例,它本身就是一個完整的搜索引擎。

    3. 我們的文檔被存儲和索引到分片內,但是應用程序是直接與索引而不是與分片進行交互。

    4. ES實際上就是利用分片來實現分布式。

    5. 分片是數據的容器,文檔保存在分片內,分片又被分配到集群內的各個節點里。

    6. 當你的集群規模擴大或者縮小時, ES會自動的在各節點中遷移分片,使得數據仍然均勻分布在集群里。

    主分片 與 副分片

    1)索引內任意一個文檔都歸屬于一個主分片,所以主分片的數目決定著索引能夠保存的最大數據量。

    2)一個副本分片只是一個主分片的拷貝。

    3)副本分片作為硬件故障時保護數據不丟失的冗余備份,并為搜索和返回文檔等讀操作提供服務。

    elasticsearch增刪改查原理

    增加原理

    1. 當用戶向一個節點提交了一個索引新文檔的請求,節點會計算新文檔應該加入到哪個分片(shard)中。

    2. 每個節點都存儲有每個分片存儲在哪個節點的信息,因此協調節點會將請求發送給對應的節點。

    3. 注意這個請求會發送給主分片,等主分片完成索引,會并行將請求發送到其所有副本分片,保證每個分片都持有最新數據。

    4. 每次寫入新文檔時,都會先寫入內存中,并將這一操作寫入一個translog文件(transaction log)中,此時如果執行搜索操作,這個新文檔還不能被索引到。

    5. ES會每隔1秒時間(這個時間可以修改)進行一次刷新操作(refresh)

    6. 此時在這1秒時間內寫入內存的新文檔都會被寫入一個文件系統緩存(filesystem cache)中,并構成一個分段(segment)。

    7. 此時這個segment里的文檔可以被搜索到,但是尚未寫入硬盤,即如果此時發生斷電,則這些文檔可能會丟失。

    8.不斷有新的文檔寫入,則這一過程將不斷重復執行。每隔一秒將生成一個新的segment,而translog文件將越來越大。

    9.不斷有新的文檔寫入,則這一過程將不斷重復執行。每隔一秒將生成一個新的segment,而translog文件將越來越大。

    說明:

    1)由上面的流程可以看出,在兩次fsync操作之間,存儲在內存和文件系統緩存中的文檔是不安全的,一旦出現斷電這些文檔就會丟失。

    2)所以ES引入了translog來記錄兩次fsync之間所有的操作,這樣機器從故障中恢復或者重新啟動,ES便可以根據translog進行還原。

    刪除(Delete)文檔

    1. ES的索引是不能修改的,因此更新和刪除操作并不是直接在原索引上直接執行。

    2. 每一個磁盤上的segment都會維護一個del文件,用來記錄被刪除的文件。

    3. 每當用戶提出一個刪除請求,文檔并沒有被真正刪除,索引也沒有發生改變,而是在del文件中標記該文檔已被刪除。

    4. 因此,被刪除的文檔依然可以被檢索到,只是在返回檢索結果時被過濾掉了。

    5. 每次在啟動segment合并工作時,那些被標記為刪除的文檔才會被真正刪除。

    更新(Update)

    1. 更新文檔會首先查找原文檔,得到該文檔的版本號。

    2. 然后將修改后的文檔寫入內存,此過程與寫入一個新文檔相同。

    3. 同時,舊版本文檔被標記為刪除,同理,該文檔可以被搜索到,只是最終被過濾掉。

    讀操作(Read):查詢過程

    1. 查詢的過程大體上分為查詢(query)和取回(fetch)兩個階段。

    2. 這個節點的任務是廣播查詢請求到所有相關分片,并將它們的響應整合成全局排序后的結果集合,這個結果集合會返回給客戶端。

    3. 查詢階段

    1)當一個節點接收到一個搜索請求,則這個節點就變成了協調節點。

    2)第一步是廣播請求到索引中每一個節點的分片拷貝。

    3)協調節點會將所有分片的結果匯總,并進行全局排序,得到最終的查詢排序結果。

    4. 取回階段

    1)查詢過程得到的是一個排序結果,標記出哪些文檔是符合搜索要求的,此時仍然需要獲取這些文檔返回客戶端。

    2)協調節點會確定實際需要返回的文檔,并向含有該文檔的分片發送get請求;

    3)分片獲取文檔返回給協調節點;協調節點將結果返回給客戶端。

    總結

    以上是生活随笔為你收集整理的Elasticsearch介绍的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。