elasticsearch的查詢原理

數據結構

在 Elasticsearch 中,數據結構分布如下:

索引(Index)

  • 索引是 Elasticsearch 中存儲數據的基本單元,相當于關系型數據庫中的數據庫。
  • 一個 Elasticsearch 集群中可以包含多個索引。

類型(Type) (從 Elasticsearch 7.0 開始已經被棄用):

  • 在較早版本的 Elasticsearch 中,一個索引可以包含多個類型。
  • 類型用于對索引中不同類型的數據進行邏輯分組。

文檔(Document):

  • 文檔是 Elasticsearch 中的基本數據單元,相當于關系型數據庫中的行。
  • 每個文檔都屬于一個類型(Type),并存儲在索引(Index)中。

字段(Field):

  • 字段是文檔中的基本數據單元,相當于關系型數據庫中的列。
  • 每個字段都有自己的數據類型,如字符串、數字、日期等。

分片(Shard):

  • 為了實現水平擴展,Elasticsearch 會將一個索引劃分為多個分片。
  • 分片是 Elasticsearch 數據存儲和處理的基本單位,每個分片都是一個獨立的 Lucene 索引。

副本(Replica):

  • 為了提高可用性和容錯性,Elasticsearch 支持為每個分片創建副本。
  • 副本分片是主分片的備份,當主分片失效時,可以切換到副本分片。

具體情況下,數據結構分布如下:

  • 當創建一個新的索引時,Elasticsearch 會根據配置將索引劃分為多個分片,并為每個分片創建一個或多個副本。
  • 當寫入新的文檔時,Elasticsearch 會將文檔存儲到一個或多個分片中。
  • 當執行搜索查詢時,Elasticsearch 會并行查詢所有相關的分片,并將結果合并返回。
  • 隨著數據量的增加,可以通過添加更多節點來水平擴展集群,Elasticsearch 會自動重新分配分片以實現負載均衡。

總之,Elasticsearch 的數據結構分布圍繞著索引、分片和副本,通過這種分布式架構實現了高性能、高可用和可擴展的搜索和分析功能。

ElasticSearch的節點

在 Elasticsearch 中,節點是集群的基本組成單元。每個節點都是一個運行 Elasticsearch 進程的服務器實例。

節點有以下幾種類型:

主節點(Master Node)

  • 主節點負責管理集群狀態,如創建、刪除索引,以及添加和刪除節點等。
  • 集群中只有少數幾個主節點,負責協調整個集群的操作。

數據節點(Data Node)

  • 數據節點負責存儲數據、執行數據相關的操作,如文檔的增刪改查。
  • 數據節點通常會比主節點多,承擔著大部分數據處理的工作。

協調節點(Coordinating Node)

  • 協調節點負責接收客戶端的請求,并將請求路由到合適的數據節點進行處理。
  • 所有節點都可以充當協調節點,幫助分擔請求負載。

熱溫冷分離(Hot-Warm-Cold Architecture)

  • 一種高級架構模式,將不同頻率訪問的數據存儲在不同的硬件上。
  • 熱數據存儲在性能更好的硬件上,冷數據存儲在性能較低但成本更低的硬盤上。

Elasticsearch 的查詢原理

倒排索引

  • Elasticsearch 使用倒排索引作為核心的索引結構。
  • 對于每個文檔中的每個詞,倒排索引都會記錄該詞出現在哪些文檔中,以及出現的頻次。
  • 這種索引結構可以快速地根據詞查找相關文檔,是全文搜索的基礎。

分片和復制:

  • 為了實現高可用和高性能,Elasticsearch 會將索引數據分散存儲在多個分片上。
  • 每個分片都有一個主分片和零個或多個副本分片。
  • 查詢時,Elasticsearch 會并行地在所有相關的分片上執行查詢,最后合并結果。

評分模型:

  • Elasticsearch 使用 TF-IDF 評分模型來計算文檔的相關度得分。
  • TF-IDF 考慮了詞頻(Term Frequency)和逆文檔頻率(Inverse Document Frequency)兩個因素。
  • 詞頻越高,文檔越相關;而在更多文檔中出現的詞,相關性越低。
  • 得分計算還會考慮文檔長度、字段權重等因素。

查詢 DSL:

  • Elasticsearch 提供了豐富的領域特定語言(DSL)來構建復雜的查詢條件。
  • Query DSL 支持全文搜索、結構化查詢、地理查詢、聚合分析等功能。
  • 開發者可以靈活地組合不同的查詢子句,實現復雜的查詢邏輯。

查詢執行過程:

當用戶發起查詢請求時,Elasticsearch 會經歷以下步驟:

  • 解析查詢 DSL,生成內部的查詢計劃。
  • 根據查詢計劃,確定需要查詢的索引和分片。
  • 將查詢任務并行地分發到相關的數據節點執行。
  • 數據節點使用倒排索引在本地分片上執行查詢,并返回部分結果。
  • 協調節點收集并合并所有數據節點的部分結果,形成最終的查詢結果。
  • 協調節點根據相關度得分對結果進行排序,并返回給客戶端。

結果合并:

  • 當數據節點返回部分查詢結果時,協調節點需要對這些結果進行合并和排序。
  • 合并過程需要處理不同數據節點返回的文檔得分差異,確保最終結果的準確性。
  • 排序時,Elasticsearch 會根據文檔的相關度得分進行排序,并返回給客戶端。

總的來說,Elasticsearch 的查詢原理依賴于倒排索引、分布式架構、評分模型等核心技術,為用戶提供了高性能、高可擴展的搜索和分析能力。通過靈活的 Query DSL,開發者可以構建出復雜的查詢邏輯,滿足各種業務需求。

什么是倒排索引以及工作原理

正排索引vs.倒排索引

  • 正排索引是一種常見的索引結構,它將文檔 ID 映射到文檔內容。
  • 而倒排索引則相反,它將詞語映射到包含該詞語的文檔 ID 列表。

倒排索引的組成

倒排索引由兩個主要部分組成:

  • 詞典(Lexicon): 存儲所有唯一詞語,并指向它們在倒排列表中的位置。
  • 倒排列表(Posting List): 記錄每個詞語出現在哪些文檔中,以及出現的頻次等信息。

倒排索引的構建過程

  • 首先,對文檔集合進行分詞,提取出所有的詞語。
  • 然后,為每個唯一詞語建立一個倒排列表,記錄該詞出現在哪些文檔中。
  • 同時,還會記錄該詞在每個文檔中出現的頻次、位置等信息。

倒排索引的查詢過程

  • 當用戶進行查詢時,Elasticsearch 會首先查找詞典,找到查詢詞在倒排列表中的位置。
  • 然后,按照倒排列表中記錄的文檔 ID 列表,去獲取這些文檔的內容。
  • 最后,根據詞頻、文檔長度等因素計算每個文檔的相關度得分,并返回給用戶。

倒排索引的優勢

  • 倒排索引可以快速地根據詞查找相關文檔,是全文搜索的基礎。
  • 相比正排索引,倒排索引可以更高效地執行全文檢索查詢。
  • 倒排索引支持詞語級別的搜索,可以實現復雜的查詢邏輯。

可視為一種二級索引

Elasticsearch 中的索引確實可以理解為一種二級索引。讓我們更詳細地解釋一下:

索引的概念

  • 在 Elasticsearch 中,索引相當于關系型數據庫中的表。
  • 索引用于存儲和管理一類相似的文檔數據。
  • 每個索引都有自己的映射(Mapping),定義了文檔中各個字段的數據類型和分析行為。

倒排索引的關系

  • 每個 Elasticsearch 索引都有一個或多個倒排索引。
  • 倒排索引是 Elasticsearch 用于實現全文搜索的核心數據結構。
  • 它將文檔中的詞語映射到包含該詞語的文檔列表,大大提高了全文檢索的效率。

二級索引的對比

  • 在關系型數據庫中,我們常見的二級索引是在表的某些列上建立的索引。
  • 這種索引可以加快基于該列的查詢速度,但仍需要掃描整個表。
  • 而 Elasticsearch 的倒排索引則更進一步,直接將詞語與文檔 ID 建立映射關系,無需掃描整個文檔。

索引的優勢

  • Elasticsearch 的索引不僅支持全文搜索,還可以進行結構化查詢、地理查詢等復雜操作。
  • 索引可以靈活地定義映射,支持動態添加新的字段,非常適用于schema-less的數據。
  • 索引可以水平擴展,通過增加節點來提升查詢性能。

總之,Elasticsearch 中的索引確實可以視為一種二級索引,但它基于倒排索引的核心技術,在全文搜索等場景下展現出了更強大的性能和靈活性。這種索引結構是 Elasticsearch 高性能搜索和分析的關鍵所在。

類似于分表的分片

Elasticsearch 中的分片(Shard)確實類似于關系型數據庫中的分表,它們都是為了提高系統的性能和可擴展性而采取的措施。讓我們更詳細地了解一下 Elasticsearch 中分片的作用和工作機制:

分片的概念

  • 在 Elasticsearch 中,每個索引都會被劃分成一個或多個分片(Primary Shard)。
  • 這些分片可以分散在集群中的多個節點上,從而實現數據的分布式存儲。
  • 除了主分片,每個索引還可以有零個或多個副本分片(Replica Shard),用于數據的冗余備份。

分片的作用

  • 提高查詢性能:查詢請求可以并行地在多個分片上執行,從而提高整體的查詢效率。
  • 支持水平擴展:通過增加節點,可以增加分片的數量,從而支持更大規模的數據存儲和查詢。
  • 提高可靠性:副本分片可以提供數據冗余備份,增強系統的容錯能力。

分片的工作機制

  • 當用戶向 Elasticsearch 寫入數據時,數據會被路由到對應的主分片上進行存儲。
  • 同時,主分片的副本會被自動同步到其他節點上,形成副本分片。
  • 當用戶查詢時,查詢請求會被并行地分發到所有相關的分片上執行,最后將結果匯總返回。

分片的靈活性

  • 分片數可以在創建索引時指定,也可以在索引創建后動態調整。
  • 分片數的選擇需要權衡數據量、查詢性能和容錯性等因素。
  • 分片數過少可能導致單個分片過大,影響性能;分片數過多又可能造成資源浪費。

總之,Elasticsearch 中的分片機制確實類似于關系型數據庫中的分表,都是為了提高系統的性能和可擴展性。分片在 Elasticsearch 中扮演了關鍵的角色,是實現海量數據高性能存儲和檢索的基礎。

分片的

Elasticsearch 中,確定需要查詢的分片位置是很關鍵的一步。Elasticsearch 提供了一些機制來幫助我們高效地定位查詢的分片,主要包括以下幾個方面:

路由算法

  • Elasticsearch 使用一個確定性的哈希路由算法來決定數據寫入到哪個分片。
  • 該算法基于文檔的 ID 值計算出一個分片編號,從而將文檔路由到對應的分片上。

routing 參數

  • 在查詢時,用戶可以指定一個 routing 參數來自定義文檔的路由方式。
  • 這樣可以保證同一個查詢請求會命中同一組分片,提高查詢效率。

分片搜索

  • 當用戶發起查詢請求時,Elasticsearch 會自動將查詢請求分發到相關的所有分片上執行。
  • 各個分片并行處理查詢,最后將結果匯總返回給用戶。

分片元數據

  • Elasticsearch 會維護每個索引的分片元數據信息,記錄每個分片所在的節點等信息。
  • 當執行查詢時,協調節點會根據這些元數據信息,將查詢請求路由到正確的分片上。

分片感知

  • Elasticsearch 客戶端庫會緩存索引的分片元數據信息,減少與協調節點的交互。
  • 這樣客戶端就可以直接感知分片的位置信息,進一步提高查詢效率。

并行處理的實現

Elasticsearch 中的并行處理是通過以下幾個關鍵機制來實現的:

分片結構

  • 如前所述,Elasticsearch 會將索引數據劃分成多個主分片和副本分片。
  • 這些分片可以分散存儲在集群的不同節點上,從而為并行處理奠定基礎。

查詢路由

  • 當用戶發起查詢請求時,Elasticsearch 會根據路由算法將查詢請求分發到相關的所有分片上。
  • 這種查詢路由機制確保了查詢可以并行地在多個分片上執行。

分片搜索

  • 各個分片會獨立地處理查詢請求,并返回部分結果。
  • Elasticsearch 的協調節點會收集這些部分結果,并進行最終的合并和排序輸出。

線程池管理

  • Elasticsearch 在每個節點上都維護了多個線程池,用于處理不同類型的任務,如搜索、索引、bulk 等。
  • 這些線程池可以充分利用節點的CPU資源,提高并行處理能力。

節點協調

  • 當用戶向 Elasticsearch 發起查詢請求時,請求會先到達一個協調節點。
  • 協調節點會負責將請求分發到相關分片,收集分片結果,并將最終結果返回給用戶。
    這種節點協調機制進一步優化了并行查詢的過程。

資源隔離

  • Elasticsearch 會為不同類型的任務設置獨立的資源池,如CPU、內存等。
  • 這種資源隔離機制確保了并行任務之間不會互相干擾,充分發揮集群的并行處理能力。

總的來說,Elasticsearch 的并行處理機制建立在分片結構、查詢路由、線程池管理等多個層面。通過合理利用集群資源,Elasticsearch 可以高效地并行執行各種查詢和索引任務,大大提高了系統的處理能力和性能

Java實現

Elasticsearch 是基于 Java 語言實現的。

具體來說:

Lucene 基礎

  • Elasticsearch 的核心是基于 Apache Lucene 這個全文搜索引擎庫。
  • Lucene 本身是用 Java 語言開發的高性能全文搜索庫。

Elasticsearch 架構

  • Elasticsearch 是基于 Lucene 構建的一個分布式搜索和分析引擎。
  • Elasticsearch 的大部分核心組件和功能都是用 Java 語言實現的。

集群管理

  • Elasticsearch 的集群管理、節點通信、數據分片等核心機制也是用 Java 實現的。

查詢處理

  • Elasticsearch 的查詢解析、執行計劃生成、結果合并等關鍵邏輯同樣基于 Java 語言。

插件擴展

  • Elasticsearch 提供了豐富的插件機制,絕大部分官方插件也是用 Java 開發的。

客戶端支持

  • Elasticsearch 官方提供了多種語言的客戶端,如 Java、Python、C#、Node.js 等。
  • 這些客戶端都是基于 Elasticsearch 的 Java API 進行二次封裝。

總的來說,Elasticsearch 作為一個企業級的搜索引擎和分析平臺,其核心實現和架構都是基于 Java 語言構建的。這得益于 Java 在企業級應用中的廣泛應用,以及 Lucene 這個高性能全文搜索引擎庫的 Java 語言基礎。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/36941.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/36941.shtml
英文地址,請注明出處:http://en.pswp.cn/web/36941.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Mathematica訓練課(46)-- 一些常用的畫圖函數

在前面的課程中,我們已經梳理了Plot的畫圖用法,今天就詳細梳理一下其他的畫圖函數用法; 1. 畫一條直線 2. Circle(圓) 3. Disk(圓盤) 4. 畫出一個矩形 5. 箭頭

c-前綴平方和序列(牛客小白月賽97)

題目&#xff1a; 假如一個長度為 n的正整數序列滿足所有前綴和 都是平方數&#xff0c;那么稱這種序列為前綴平方序列。 條件1<si<x 取模1e97 首先找出小于x的平方數有幾個。 然后用二項式定理 算出小于x的平方數中取n個的種數。 #include<bits/stdc.h> using…

大數據可視化實驗(六)——ECharts與pyecharts數據可視化

目錄 一、實驗目的... 1 二、實驗環境... 1 三、實驗內容... 1 1、ECharts可視化制作.. 1 1&#xff09;使用ECharts繪制折線圖顯示一周的天氣變換。... 1 2&#xff09;使用ECharts繪制柱狀圖顯示商品銷量的變化。... 4 2、pyecharts可視化制作.. 7 1&#xff09;使用…

beautifulSoup庫

是什么? Beautiful Soup(簡稱BS4)是一種強大而靈活的HTML和XML解析庫,廣泛用于Python爬蟲和數據采集中。相比正則表達式更加簡潔. Beautiful Soup提供一些簡單的、python式的函數用來處理導航、搜索、修改分析樹等功能。它是一個工具箱,通過解析文檔為用戶提供需要抓取的…

【知識學習】Unity3D中Shader Graph的概念及使用方法示例

Unity3D中的Shader Graph是一個強大的可視化Shader編輯工具&#xff0c;它允許用戶通過拖拽和連接節點的方式來創建Shader&#xff0c;而不是通過傳統的編寫代碼的方式。Shader Graph使得Shader的創建過程更加直觀和易于理解&#xff0c;特別是對于那些不熟悉Shader語言編程的美…

Java中的性能調優技巧與工具推薦

Java中的性能調優技巧與工具推薦 大家好&#xff0c;我是免費搭建查券返利機器人省錢賺傭金就用微賺淘客系統3.0的小編&#xff0c;也是冬天不穿秋褲&#xff0c;天冷也要風度的程序猿&#xff01;今天我們來探討Java中的性能調優技巧與工具推薦。Java作為一門廣泛應用的編程語…

【OpenREALM學習筆記:13】pose_estimation.cpp和pose_estimation.h

UML Class Diagram 圖中紅色框為頭文件中所涉及到的函數、變量和結構體 核心函數 PoseEstimation::process() 其核心作用為執行位姿估計的處理流程&#xff0c;并返回是否在此循環中進行了任何處理。 在這個函數中判斷并完成地理坐標的初始化或這地理坐標的更新。 這里需要…

QTreeView第一列自適應

通過setStretchLastSection(bool stretch)可以設置最后一列自適應,對于QTreeView,stretch默認為true。但有時候我們需要設置第一列自適應,比如文件瀏覽器,共有名稱、大小和修改日期三列,大小和日期的寬度幾乎是固定的,但名稱卻可長可短,此時我們希望在窗口大小變化時,第…

IDEA中Maven配置依賴和排除依賴

目錄 依賴配置 添加依賴的幾種方式&#xff1a; 1.利用中央倉庫搜索的依賴坐標 2.利用IDEA工具搜索依賴 3.熟練上手maven后&#xff0c;快速導入依賴 排除依賴 依賴配置 依賴&#xff1a;指當前項目運行所需要的jar包。一個項目中可以引入多個依賴&#xff1a; 例如&am…

python r”, b”, u”, f” 前綴詳解

1、r前綴 一般來說&#xff0c;\n’是一個換行符&#xff0c;是一個字符串&#xff1b;而加上r為前綴后&#xff0c;不會以任何特殊方式處理反斜杠。因此&#xff0c;r"\n" 是包含 ‘\’ 和 ‘n’ 的雙字符字符串&#xff1b;示例如下&#xff1a; >>> pr…

Go-知識測試-工作機制

Go-知識測試-工作機制 生成test的maintest的main如何啟動case單元測試 runTeststRunnertesting.T.Run 示例測試 runExamplesrunExampleprocessRunResult 性能測試 runBenchmarksrunNtesting.B.Run 在 Go 語言的源碼中&#xff0c;go test 命令的實現主要在 src/cmd/go/internal…

Java面試題:解釋反應式編程的概念,并討論如何在Java中使用RxJava或Project Reactor實現

反應式編程&#xff08;Reactive Programming&#xff09;是一種基于異步數據流和變化傳播的編程范式。它強調通過聲明式編程來處理異步事件流和數據流&#xff0c;簡化了復雜的異步操作和并發編程。反應式編程適用于處理異步事件、多線程處理、大量數據流、用戶交互等場景。 …

零基礎快速上手HarmonyOS ArkTS開發4---從簡單的頁面開始

接著上一次零基礎快速上手HarmonyOS ArkTS開發3---應用程序框架的繼續往下。 常用基礎組件&#xff1a; 概述&#xff1a; 關于組件的一些基礎概念就里就不多說了&#xff0c;官方有很詳細的說明&#xff0c;而在HarmonyOS按功能分有如下幾大類組件&#xff1a;基礎組件、容…

springboot筆記示例八:yml文件數據庫連接redis密碼加密實現使用jasypt加密

springboot筆記示例八&#xff1a;yml文件數據庫連接redis密碼加密實現使用jasypt加密 本文md文件下載 https://download.csdn.net/download/a254939392/89496228點擊下載本文md文件 說明 springboot中大多數配置我們都采用yml文件配置&#xff0c;比如數據庫連接&#xff…

安卓短視頻去水印v1.7 簡潔好用

各大平臺視頻無水印提取&#xff0c;登錄即永久會員&#xff01; 無水印提取&#xff0c;圖片無水印提取 視頻旋轉&#xff0c;倒放&#xff0c;轉gif等功能 鏈接&#xff1a;https://pan.baidu.com/s/1buoJmAvSFBiRkBmHc7Nn5w?pwd2fu4 提取碼&#xff1a;2fu4

LeetCode-數值-No49字母異位詞

題目&#xff1a; 給你一個字符串數組&#xff0c;請你將 字母異位詞 組合在一起。可以按任意順序返回結果列表。字母異位詞 是由重新排列源單詞的所有字母得到的一個新單詞。 示例 1: 輸入: strs ["eat", "tea", "tan", "ate", &q…

Lr、LrC軟件下載安裝 Adobe Lightroom專業攝影后期處理軟件安裝包分享

Adobe Lightroom它不僅為攝影師們提供了一個強大的照片管理平臺&#xff0c;更以其出色的后期處理功能&#xff0c;成為了攝影愛好者們爭相追捧的必備工具。 在這款軟件中&#xff0c;攝影師們可以輕松地管理自己的照片庫&#xff0c;無論是按拍攝日期、主題還是其他自定義標簽…

淺談如何在linux上部署java環境

文章目錄 一、部署環境1.1、JDK1.2、Tomcat1.3、MySQL 二、將自己寫的的程序部署到云服務器上 一、部署環境 為了在linux上部署 Java web 程序&#xff0c;需要安裝一下環境。 1.1、JDK 直接使用 yum 命令安裝 openjdk。我們 windows系統上 下載的是 oracle 官方的 jdk。而 …

用Python將PowerPoint演示文稿轉換到圖片和SVG

PowerPoint演示文稿作為展示創意、分享知識和表達觀點的重要工具&#xff0c;被廣泛應用于教育、商務匯報及個人項目展示等領域。然而&#xff0c;面對不同的分享場景與接收者需求&#xff0c;有時需要我們將PPT內容以圖片形式保存與傳播。這樣能夠避免軟件兼容性的限制&#x…

Cisco Identity Services Engine (ISE) 3.3 Patch 2 - 基于身份的網絡訪問控制和策略實施系統

Cisco Identity Services Engine (ISE) 3.3 Patch 2 - 基于身份的網絡訪問控制和策略實施系統 思科身份服務引擎 (ISE) - 下一代 NAC 解決方案 請訪問原文鏈接&#xff1a;Cisco Identity Services Engine (ISE) 3.3 Patch 2 - 基于身份的網絡訪問控制和策略實施系統&#xf…