ElasticSearch 的工作原理

理解 ElasticSearch 的工作原理需要從索引、搜索、以及其背后的核心機制幾個方面來探討。


1. ElasticSearch 是什么?

ElasticSearch 是一個分布式搜索和分析引擎,適用于各種類型的數據,例如文本、數值、地理位置、結構化或非結構化數據。它基于 Apache Lucene 構建,提供高效的全文本搜索能力。


2. 數據的寫入與索引

(1) 數據寫入
  • 文檔存儲: 數據以 JSON 格式的文檔寫入。
  • 索引:
    • 文檔屬于一個索引(類似于數據庫中的表)。
    • 每個文檔由一個唯一的 _id 標識。
  • 分片機制:
    • 一個索引被劃分為多個分片(shards),每個分片可以分布在不同的節點上。
    • 分片提供了水平擴展能力。
    • 每個分片有主副本和副本分片,提供數據高可用性。
(2) 倒排索引

倒排索引是 ElasticSearch 的核心結構,用于快速查找包含某個詞的所有文檔:

  1. 文檔的每個字段被分詞器(Analyzer)拆分成單個的詞條(terms)。
  2. 構建詞條到文檔的映射。
  3. 例如:
    • 文檔 1:ElasticSearch is fast.
    • 文檔 2:Fast search with ElasticSearch.
    • 倒排索引:
      fast -> [1, 2]
      ElasticSearch -> [1, 2]
      search -> [2]
      

3. 數據寫入流程

  1. 寫入內存緩沖區和事務日志(Translog):
    • 數據先寫入內存中的緩沖區,同時寫入磁盤上的事務日志,用于故障恢復。
  2. 段(Segment)生成:
    • 定期(默認 1 秒)刷新(refresh),將緩沖區的數據寫入段文件(不可變)。
    • 每個段中包含倒排索引。
  3. 段合并:
    • 為了減少小段的開銷,ElasticSearch 會定期合并小段為大段,釋放舊段占用的資源。

4. 數據的搜索

搜索使用分布式處理,流程如下:

  1. 路由到分片:
    • 請求被路由到對應的分片(主分片或副本分片)。
  2. 分片內查詢:
    • 每個分片查詢其本地的倒排索引,返回匹配結果。
  3. 合并結果:
    • 主節點從各分片匯總結果,根據相關性或排序規則生成最終結果。

5. 核心特性

(1) 近實時搜索(NRT)
  • 數據寫入后并非立即可搜索,而需要等待刷新。
  • 刷新間隔(默認 1 秒)可通過 refresh_interval 配置。
(2) 分布式架構
  • 分片與副本分布在不同節點,提供高可用性和擴展性。
(3) 分析功能
  • ElasticSearch 不僅用于搜索,還支持聚合(aggregation)分析。

6. 優化與實踐

  • 調整分片數: 根據數據規模和集群節點調整分片數。
  • 調整刷新間隔: 根據業務需求調整 refresh_interval
  • 使用批量操作: 批量寫入(bulk API)提高寫入效率。
  • 設置合適的映射(Mapping): 為字段指定類型、分詞器,提升搜索性能。

通過這些機制和優化,ElasticSearch 能快速索引和搜索海量數據,適應各種業務場景需求。

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

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

相關文章

STM32F407 | Embedded IDE01 - vscode搭建Embedded IDE開發環境(支持JLINK、STLINK、DAPLINK)

導言 Embedded IDE官網:https://em-ide.com/docs/intro 我猜肯定有部分人使用SI Keil開發STM32項目,也有vscode Keil開發STM32程序。SI或vscode編寫代碼,然后切換Keil編譯、下載、調試程序。有一段時間,我也是這么干的。但是,程…

光譜相機的工作原理

光譜相機的工作原理主要基于不同物質對不同波長光的吸收、反射和透射特性存在差異,以下是其具體工作過程: 一、光的收集 目標物體在光源照射下,其表面會對光產生吸收、反射和透射等相互作用。光譜相機的光學系統(如透鏡、反射鏡…

ThinkPHP接入PayPal支付

ThinkPHP 5接入PayPal 支付,PayPal的流程是服務器請求Paypal的接口下單(需要傳訂單id/支付成功的重定向地址/支付失敗的重定向地址),接會返回一個支付地址,項目服務器把地址返給用戶,用戶打開鏈接登錄Paypa…

stream流的toMap

假設有這么一個類: import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors;public class Student {private int id;private String name;public Student(int id, String name) {this.id id;…

html + css 淘寶網實戰

之前有小伙伴說,淘寶那么牛逼你會寫代碼,能幫我做一個一樣的淘寶網站嗎,好呀,看我接下來如何給你做一個淘寶首頁。hahh,開個玩笑。。。學習而已。 在進行html css編寫之前 先了解下網頁的組成和網頁元素的尺寸吧 1.網頁的組成 …

神經網絡、深度學習、卷積神經網絡

好的!我會盡量詳細且易懂地為你解釋這些概念,并在最后用簡單直白的語言總結一下。 1. 神經網絡思想 神經網絡是靈感來自于生物大腦神經元的工作原理,是一種模仿人類大腦處理信息的方式來設計的數學模型。我們的大腦由億萬個神經元組成&…

設計模式01:創建型設計模式之單例、簡單工廠的使用情景及其基礎Demo

一、單例模式 1.情景 連接字符串管理 2.好處 代碼簡潔:可全局訪問連接字符串。性能優化:一個程序一個連接實例,避免反復創建對象(連接)和銷毀對象(連接)。線程安全:連接對象不會…

【不太正常的題】LeetCode.232:用棧的函數接口實現隊列

🎁個人主頁:我們的五年 🔍系列專欄:初階數據結構刷題 🎉歡迎大家點贊👍評論📝收藏?文章 🚗 1.問題描述: 題目中說了只能使用兩個棧實現隊列,并且只能使用…

Linux搭建text-generation-webui框架,安裝通義千問大模型,開放對外api,voxta測試對話圖文教程

目錄 text-generation-webui部分 開放對外API 通義千問部分 遠程API對話測試部分 text-generation-webui部分 本來不想發這個文章的,但是自己部署的時候看了挺多人的帖子,很多發的不全面,要么就是跟著他們流程走有些小問題啥的&#xff…

QT程序發布后,mysql在其它電腦設備無法連接數據庫

QT程序發布后,mysql在其它電腦設備無法連接數據庫 D:\mysql-5.7.24-winx64\lib, mysql-5.7.24-winx64是一個壓縮包,用于啟動mysql服務,創建數據庫 壓縮包 解決方法: 拷貝庫到exe的相同目錄,libmysql.dll,libmysql.li…

ElasticSearch 的核心功能

要深入理解 ElasticSearch 的核心功能,需要全面掌握其 全文搜索、分析、聚合 和 索引生命周期管理(ILM) 的設計原理和實際應用。 1. 全文搜索 ElasticSearch 的全文搜索是其核心功能之一,依賴于倒排索引和強大的分詞、相關性評分…

在Nginx部署Web應用,如何保障后端API的安全

1. 使用HTTPS和http2.0 參考:Nginx配置HTTP2.0_nginx 支持 2.0-CSDN博客 2. 設置嚴格的CORS策略 通過add_header指令設置CORS頭。 只允許來自https://frontend.yourdomain.com的請求訪問API location /api/ {if ($http_origin ~* (https://frontend\.yourdomai…

Nginx單向鏈表 ngx_list_t

目錄 基本概述 數據結構 接口描述 具體實現 ngx_list_create ngx_list_init ngx_list_push 使用案例 整理自 nginx 1.9.2 源碼 和 《深入理解 Nginx:模塊開發與架構解析》 基本概述 Nginx 中的 ngx_list_t 是一個單向鏈表容器,鏈表中的每一個節…

es快速掃描

介紹 Elasticsearch簡稱es,一款開源的分布式全文檢索引擎 可組建一套上百臺的服務器集群,處理PB級別數據 可滿足近實時的存儲和檢索 倒排索引 跟正排索引相對,正排索引是根據id進行索引,所以查詢效率非常高,但是模糊…

軟件需求建模方法

軟件需求建模是一個涉及多個學科的領域,其研究方向廣泛且多樣。以下是一些主要的研究方向: 1. 需求工程方法:研究如何更有效地收集、分析、規格化和驗證軟件需求。這包括新的需求工程方法論和工具的開發。 2. 需求管理:關注需求…

軟件項目需求分析的實踐探索(1)

一、項目啟動與規劃 組建團隊 包括項目經理、系統分析師、業務分析師以及可能涉及的最終用戶代表和領域專家等。例如,開發一個醫療管理軟件,就需要有醫療行業的專家參與,確保對醫療業務流程有深入理解。明確各成員的職責,如系統分…

wordpres當前分類調用父分類的名稱和鏈接

在WordPress中&#xff0c;如果你想在當前分類頁面調用并顯示父分類的名稱和鏈接&#xff0c;你可以使用以下代碼片段&#xff1a; <?php // 獲取當前分類的ID $cat_id get_queried_object_id();// 獲取當前分類的父分類ID $parent_id get_term($cat_id, category)->…

前端Python應用指南(三)Django vs Flask:哪種框架適合構建你的下一個Web應用?

《寫給前端的python應用指南》系列&#xff1a; &#xff08;一&#xff09;快速構建 Web 服務器 - Flask vs Node.js 對比&#xff08;二&#xff09;深入Flask&#xff1a;理解Flask的應用結構與模塊化設計 在上一篇博文中&#xff0c;我們深入探討了Flask框架&#xff0c;…

網絡管理-期末項目(附源碼)

環境&#xff1a;網絡管理 主機資源監控系統項目搭建 &#xff08;保姆級教程 建議點贊 收藏&#xff09;_搭建網絡版信息管理系統-CSDN博客 效果圖 下面3個文件的項目目錄(python3.8.8的虛擬環境) D:\py_siqintu\myproject5\Scripts\mytest.py D:\py_siqintu\myproject5\Sc…

MySQL 常用程序介紹

以下是一些常用的MySQL程序&#xff1a; 程序名作?mysqldMySQL的守護進程即 MySQL 服務器&#xff0c;要使?MySQL 服務器 mysqld必須正在運?狀態mysql MySQL客?端程序&#xff0c;?于交互式輸? SQL 語句或以批處理模式從?件執?SQL的命令??具 mysqlcheck?于檢查、修…