Elasticsearch 是一個(gè)開源的、基于 Lucene 的分布式搜索和分析引擎,設(shè)計(jì)用于云計(jì)算環(huán)境中,能夠?qū)崿F(xiàn)實(shí)時(shí)的、可擴(kuò)展的搜索、分析和探索全文和結(jié)構(gòu)化數(shù)據(jù)。它具有高度的可擴(kuò)展性,可以在短時(shí)間內(nèi)搜索和分析大量數(shù)據(jù)。
Elasticsearch 不僅僅是一個(gè)全文搜索引擎,它還提供了分布式的多用戶能力,實(shí)時(shí)的分析,以及對(duì)復(fù)雜搜索語句的處理能力,使其在眾多場景下,如企業(yè)搜索,日志和事件數(shù)據(jù)分析等,都有廣泛的應(yīng)用。
本文將向你詳細(xì)介紹什么是倒排索引、以及 Elasticsearch 數(shù)據(jù)存儲(chǔ)、數(shù)據(jù)更新和數(shù)據(jù)刪除的原理
1、倒排索引
1.1、為什么需要倒排索引
倒排索引,也是索引。索引,初衷都是為了快速檢索到你要的數(shù)據(jù)。
每種數(shù)據(jù)庫都有自己要解決的問題(或者說擅長的領(lǐng)域),對(duì)應(yīng)的就有自己的數(shù)據(jù)結(jié)構(gòu),而不同的使用場景和數(shù)據(jù)結(jié)構(gòu),需要用不同的索引,才能起到最大化加快查詢的目的。
對(duì) Mysql 來說,是 B+ 樹,對(duì) Elasticsearch 和 Lucene 來說,是倒排索引。
Elasticsearch 是建立在全文搜索引擎庫 Lucene 基礎(chǔ)上的搜索引擎,它隱藏了 Lucene 的復(fù)雜性,取而代之的提供一套簡單一致的 RESTful API,不過掩蓋不了它底層也是 Lucene 的事實(shí)。Elasticsearch 的倒排索引,其實(shí)就是 Lucene 的倒排索引。
1.2、為什么叫倒排索引
“倒排索引”(Inverted Index)的概念是從"正向索引"(Forward Index)中衍生出來的。
在"正向索引"中,我們從文檔出發(fā),記錄下每個(gè)文檔中出現(xiàn)的詞項(xiàng),這樣就可以知道每個(gè)文檔包含哪些詞項(xiàng)。而在"倒排索引"中,我們從詞項(xiàng)出發(fā),記錄下每個(gè)詞項(xiàng)出現(xiàn)在哪些文檔中,這樣就可以知道每個(gè)詞項(xiàng)被哪些文檔包含。
正向索引:document -> to -> words
倒排索引:word -> to -> documents
因此,“倒排索引"可以看作是"正向索引"的逆操作,所以被稱為"倒排”。在全文搜索中,"倒排索引"是非常重要的數(shù)據(jù)結(jié)構(gòu),因?yàn)樗梢宰屛覀兛焖僬业桨囟ㄔ~項(xiàng)的所有文檔。
1.3、倒排索引的結(jié)構(gòu)
倒排索引作為一種數(shù)據(jù)結(jié)構(gòu),用于存儲(chǔ)一種映射關(guān)系,即從詞項(xiàng)到出現(xiàn)該詞項(xiàng)的文檔的映射。它是全文搜索引擎的核心組成部分,如 Elasticsearch、Lucene 等。
在倒排索引中,每個(gè)唯一的詞項(xiàng)都有一個(gè)相關(guān)的倒排列表,這個(gè)列表中包含了所有包含該詞項(xiàng)的文檔的 ID。這樣,當(dāng)我們搜索一個(gè)詞項(xiàng)時(shí),搜索引擎只需要查找倒排索引,就可以快速找到所有包含這個(gè)詞項(xiàng)的文檔。
例如,假設(shè)我們有以下三個(gè)文檔:
1. 文檔1:I love coding
2. 文檔2:I love reading
3. 文檔3:I love both
對(duì)這些文檔建立倒排索引后,我們會(huì)得到以下的映射關(guān)系:
- I:文檔1,文檔2,文檔3
- love:文檔1,文檔2,文檔3
- coding:文檔1
- reading:文檔2
- both:文檔3
所以,當(dāng)我們搜索"love"時(shí),搜索引擎會(huì)在倒排索引中找到"love",然后返回所有包含"love"的文檔,即文檔1,文檔2 和文檔3。
2、數(shù)據(jù)存儲(chǔ)原理
2.1、數(shù)據(jù)存儲(chǔ)過程
創(chuàng)建或更新倒排索引是 Elasticsearch 數(shù)據(jù)存儲(chǔ)過程的核心部分之一,Elasticsearch 的數(shù)據(jù)存儲(chǔ)過程也確實(shí)包括創(chuàng)建倒排索引的過程,但并不僅限于此。
Elasticsearch 的數(shù)據(jù)存儲(chǔ)過程主要包括以下多個(gè)步驟:
- 接收數(shù)據(jù):Elasticsearch 首先接收到用戶通過 HTTP 請(qǐng)求發(fā)送的數(shù)據(jù),數(shù)據(jù)通常是 JSON 格式的文檔。
- 分配文檔 ID:如果用戶沒有指定文檔 ID,Elasticsearch 會(huì)為新文檔自動(dòng)生成一個(gè)唯一的 ID。
- 選擇分片:Elasticsearch 會(huì)根據(jù)文檔ID和索引的分片策略,選擇一個(gè)分片來存儲(chǔ)這個(gè)文檔。
- 創(chuàng)建和更新倒排索引:Elasticsearch 會(huì)對(duì)文檔的內(nèi)容進(jìn)行分詞,生成詞項(xiàng),并為這些詞項(xiàng)創(chuàng)建或更新倒排索引。這樣,新的文檔就可以被搜索到了。
- 存儲(chǔ)文檔:Elasticsearch 會(huì)將文檔的原始內(nèi)容和元數(shù)據(jù)(如版本號(hào)、修改時(shí)間等)存儲(chǔ)在分片中。原始內(nèi)容存儲(chǔ)在 _source 字段中,用于在獲取文檔時(shí)使用。
- 復(fù)制文檔:為了提高數(shù)據(jù)的可用性和搜索性能,Elasticsearch 會(huì)將文檔復(fù)制到其他節(jié)點(diǎn)的副本分片中。
- 確認(rèn)寫入:當(dāng)文檔被成功寫入主分片和所有副本分片后,Elasticsearch 會(huì)向用戶發(fā)送一個(gè)確認(rèn)響應(yīng)。
本篇接下來內(nèi)容,我們將重點(diǎn)關(guān)注在創(chuàng)建和更新倒排索引的過程之中,我們將詳細(xì)研究的是創(chuàng)建倒排索引的過程,這是因?yàn)榈古潘饕?Elasticsearch 實(shí)現(xiàn)快速全文搜索的關(guān)鍵數(shù)據(jù)結(jié)構(gòu)。
2.2、創(chuàng)建倒排索引的過程
創(chuàng)建倒排索引的過程主要包括以下步驟:
-
分詞:這是第一步,將一段文本分解成一個(gè)個(gè)的詞項(xiàng)(Tokens)。這個(gè)過程由分詞器(Tokenizer)完成,可以根據(jù)不同的語言和需求選擇不同的分詞器。
-
生成詞項(xiàng):對(duì)分詞后的結(jié)果進(jìn)行處理,生成最終的詞項(xiàng)。這個(gè)過程可能包括轉(zhuǎn)換為小寫、去除停用詞、詞干提取等操作。
-
創(chuàng)建倒排列表:對(duì)于每個(gè)詞項(xiàng),都創(chuàng)建一個(gè)倒排列表,記錄包含這個(gè)詞項(xiàng)的所有文檔的 ID。
-
更新倒排索引:將新的倒排列表添加到倒排索引中。如果倒排索引中已經(jīng)存在這個(gè)詞項(xiàng),就將新的文檔 ID 添加到對(duì)應(yīng)的倒排列表中。
以上就是創(chuàng)建倒排索引的主要步驟。需要注意的是,這個(gè)過程在每次插入新的文檔,或者更新已有的文檔時(shí)都會(huì)進(jìn)行。
2.3、分詞
分詞是將一段文本分解成一個(gè)個(gè)的詞項(xiàng)(Tokens)的過程。這是全文搜索和文本分析的第一步,因?yàn)橹挥袑⑽谋痉纸獬稍~項(xiàng),才能對(duì)其進(jìn)行進(jìn)一步的處理和分析。
分詞的過程通常由分詞器(Tokenizer)完成,分詞器可以根據(jù)不同的語言和需求,采用不同的分詞策略。
分詞策略決定了如何將文本分解成詞項(xiàng)。以下是一些常見的分詞策略:
-
空格分詞:這是最簡單的分詞策略,只是簡單地將文本按空格分解成詞項(xiàng)。這種方式簡單快速,但可能無法處理復(fù)雜的語言特性。
-
基于語法的分詞:這種分詞策略會(huì)考慮語言的語法規(guī)則,例如英語的復(fù)數(shù)形式、過去式等。這種方式可以提高搜索的準(zhǔn)確性,但處理起來更復(fù)雜。
-
基于詞典的分詞:這種分詞策略會(huì)使用一個(gè)詞典來分解文本,可以處理一些特殊的詞組和短語。這種方式可以提高搜索的相關(guān)性,但需要一個(gè)高質(zhì)量的詞典。
-
N-gram 分詞:這種分詞策略會(huì)將文本分解成連續(xù)的 n 個(gè)字符的序列。這種方式可以處理任何語言,但可能會(huì)生成大量的詞項(xiàng),影響搜索的效率和準(zhǔn)確性。
在 Elasticsearch 中,可以通過配置分詞器來控制分詞的策略,以適應(yīng)不同的語言和搜索需求。
2.4、生成詞項(xiàng)
生成詞項(xiàng)是分詞過程的一部分,它是將分詞后的結(jié)果進(jìn)行處理,生成最終用于創(chuàng)建倒排索引的詞項(xiàng)。
在生成詞項(xiàng)的過程中,可能會(huì)進(jìn)行以下一些操作:
-
轉(zhuǎn)換為小寫:為了使搜索不區(qū)分大小寫,通常會(huì)將所有的詞項(xiàng)轉(zhuǎn)換為小寫。
-
去除停用詞:停用詞是一些常見的、沒有太多實(shí)際意義的詞,如英語中的 “the”、“is”、“at” 等。去除停用詞可以減少倒排索引的大小,提高搜索的效率。
-
詞干提?。涸~干提取是將詞項(xiàng)轉(zhuǎn)換為其基本形式(或詞干)的過程。例如,英語中的 “running”、“runs”、“ran” 都會(huì)被轉(zhuǎn)換為 “run”。這樣可以使搜索不受詞形變化的影響。
-
詞形還原:詞形還原是將詞項(xiàng)轉(zhuǎn)換為其原始形式的過程。例如,英語中的 “better” 會(huì)被轉(zhuǎn)換為 “good”。這樣可以使搜索更準(zhǔn)確。
以上就是生成詞項(xiàng)的一些常見操作。需要注意的是,這些操作的具體實(shí)現(xiàn)可能會(huì)依賴于特定的語言和分詞器。
2.5、分詞器
在 Elasticsearch 中,生成詞項(xiàng)的設(shè)置主要通過配置分詞器(Analyzer)來實(shí)現(xiàn)。分詞器由一個(gè)分詞器(Tokenizer)和多個(gè)過濾器(Filter)組成,分詞器負(fù)責(zé)將文本分解成詞項(xiàng),過濾器負(fù)責(zé)對(duì)詞項(xiàng)進(jìn)行處理。
以下是一個(gè)簡單的分詞器配置示例:
{
"settings": {
"analysis": {
"analyzer": {
"my_analyzer": {
"tokenizer": "standard",
"filter": ["lowercase", "my_stemmer"]
}
},
"filter": {
"my_stemmer": {
"type": "stemmer",
"name": "english"
}
}
}
}
}
在這個(gè)示例中,我們定義了一個(gè)名為 “my_analyzer” 的分詞器,它使用 “standard” 分詞器和兩個(gè)過濾器: “l(fā)owercase” 和 “my_stemmer”。 “l(fā)owercase” 過濾器會(huì)將所有詞項(xiàng)轉(zhuǎn)換為小寫, “my_stemmer” 過濾器會(huì)對(duì)英語詞項(xiàng)進(jìn)行詞干提取。
你可以根據(jù)需要,選擇不同的分詞器和過濾器,以實(shí)現(xiàn)不同的生成詞項(xiàng)策略。例如,如果你不想啟用詞干提取,可以去掉 “my_stemmer” 過濾器;如果你想啟用詞形還原,可以添加一個(gè)詞形還原過濾器。
需要注意的是,Elasticsearch 的分詞器和過濾器都是插件形式提供的,不同的插件支持不同的語言和功能。在使用前,你需要確保你的 Elasticsearch 安裝了相應(yīng)的插件。
2.6、創(chuàng)建倒排列表
創(chuàng)建倒排列表是創(chuàng)建倒排索引過程的一部分。對(duì)于每個(gè)詞項(xiàng),都會(huì)創(chuàng)建一個(gè)倒排列表,記錄包含這個(gè)詞項(xiàng)的所有文檔的 ID。
以下是創(chuàng)建倒排列表的基本步驟:
- 初始化倒排列表:對(duì)于一個(gè)新的詞項(xiàng),首先創(chuàng)建一個(gè)空的倒排列表。
- 添加文檔 ID:當(dāng)一個(gè)文檔被分詞并生成詞項(xiàng)后,將這個(gè)文檔的 ID 添加到對(duì)應(yīng)詞項(xiàng)的倒排列表中。
- 排序:為了提高搜索效率,倒排列表通常會(huì)按照文檔 ID 的順序進(jìn)行排序。
- 壓縮:為了節(jié)省存儲(chǔ)空間,倒排列表通常會(huì)進(jìn)行壓縮。常見的壓縮方法包括變長編碼、游程編碼等。
2.7、數(shù)據(jù)壓縮
對(duì)于 Elasticsearch 的壓縮問題,假設(shè)有這樣一個(gè)數(shù)組:
[73, 300, 302, 332, 343, 372]
如何把它進(jìn)行盡可能的壓縮?
Elasticsearch 中的數(shù)據(jù)壓縮主要通過以下三個(gè)步驟實(shí)現(xiàn):
-
增量編碼(Delta-encode):只記錄元素與元素之間的增量,例如數(shù)組 [73, 300, 302, 332, 343, 372] 經(jīng)過增量編碼后變?yōu)?[73, 227, 2, 30, 11, 29]。
-
分割成塊(Split into blocks):在 Lucene 中,每個(gè)塊包含 256 個(gè)文檔 ID,這樣可以保證每個(gè)塊增量編碼后,每個(gè)元素都不會(huì)超過 256(1 byte)。例如,我們可以將上述數(shù)組分割為兩個(gè)塊:[73, 227, 2] 和 [30, 11, 29]。
-
按需分配空間(Bit packing):根據(jù)每個(gè)塊中最大元素的大小,按需分配空間。例如,對(duì)于第一個(gè)塊 [73, 227, 2],最大元素是 227,需要 8 bits,所以為這個(gè)塊的每個(gè)元素分配 8 bits 的空間。對(duì)于第二個(gè)塊 [30, 11, 29],最大元素是 30,只需要 5 bits,所以為這個(gè)塊的每個(gè)元素分配 5 bits 的空間。
這三個(gè)步驟共同組成了一種編碼技術(shù),稱為 Frame Of Reference(FOR)。
這種技術(shù)可以有效地壓縮數(shù)據(jù),降低存儲(chǔ)空間的需求。
3、數(shù)據(jù)更新原理
3.1、數(shù)據(jù)更新過程
Elasticsearch 的數(shù)據(jù)更新是不是就是 Elasticsearch 更新倒排列表?Elasticsearch 的數(shù)據(jù)更新過程確實(shí)包括更新倒排索引,但并不僅限于此。
當(dāng)一個(gè)已存在的文檔在 Elasticsearch 中被更新時(shí),以下步驟會(huì)被執(zhí)行:
- 版本控制:Elasticsearch 會(huì)檢查更新請(qǐng)求中的版本信息,如果版本信息與當(dāng)前文檔的版本不匹配,更新操作會(huì)被拒絕。
- 刪除舊文檔:Elasticsearch 會(huì)將舊文檔標(biāo)記為刪除,但不會(huì)立即從磁盤中刪除。
- 插入新文檔:Elasticsearch 會(huì)將新文檔插入到索引中,這包括存儲(chǔ)新文檔的原始內(nèi)容和元數(shù)據(jù),以及更新倒排索引。
- 復(fù)制更新:為了提高數(shù)據(jù)的可用性和搜索性能,Elasticsearch 會(huì)將更新操作復(fù)制到其他節(jié)點(diǎn)的副本分片中。
- 確認(rèn)更新:當(dāng)更新操作被成功應(yīng)用到主分片和所有副本分片后,Elasticsearch 會(huì)向用戶發(fā)送一個(gè)確認(rèn)響應(yīng)。
所以,雖然更新倒排索引是 Elasticsearch 數(shù)據(jù)更新過程的重要部分,但并不是全部。Elasticsearch 還會(huì)進(jìn)行一些其他處理,如版本控制、數(shù)據(jù)復(fù)制等。
3.2、更新倒排列表
更新倒排列表是在插入新的文檔或更新已有文檔時(shí),對(duì)應(yīng)詞項(xiàng)的倒排列表需要進(jìn)行更新。
以下是更新倒排列表的基本步驟:
- 查找詞項(xiàng):首先,根據(jù)詞項(xiàng)查找對(duì)應(yīng)的倒排列表。
- 添加文檔 ID:如果是插入新的文檔,將新文檔的 ID 添加到倒排列表中。
- 刪除文檔 ID:如果是更新已有的文檔,首先從倒排列表中刪除舊文檔的 ID,然后添加新文檔的 ID。
- 排序:為了提高搜索效率,每次更新后都需要重新對(duì)倒排列表進(jìn)行排序。
- 壓縮:為了節(jié)省存儲(chǔ)空間,每次更新后都需要重新對(duì)倒排列表進(jìn)行壓縮。
3.3、版本控制
在 Elasticsearch 中,版本控制主要有以下兩個(gè)目的:
- 確保數(shù)據(jù)一致性:在分布式系統(tǒng)中,同一份數(shù)據(jù)可能會(huì)被多個(gè)節(jié)點(diǎn)同時(shí)操作,如果沒有合適的控制機(jī)制,就可能導(dǎo)致數(shù)據(jù)不一致。通過版本控制,Elasticsearch 可以確保即使在并發(fā)操作的情況下,數(shù)據(jù)的一致性也能得到保證。
- 防止更新丟失:在并發(fā)更新的情況下,如果沒有版本控制,較晚發(fā)出的更新請(qǐng)求可能會(huì)覆蓋較早發(fā)出的更新請(qǐng)求的結(jié)果,導(dǎo)致更新丟失。通過版本控制,Elasticsearch 可以確保每個(gè)更新請(qǐng)求都會(huì)被正確地應(yīng)用,防止更新丟失。
在 Elasticsearch 中,每個(gè)文檔都有一個(gè)與之關(guān)聯(lián)的版本號(hào)。當(dāng)一個(gè)文檔被更新時(shí),Elasticsearch 會(huì)檢查更新請(qǐng)求中的版本號(hào),只有當(dāng)版本號(hào)匹配時(shí),才會(huì)執(zhí)行更新操作。這樣,就可以防止由于并發(fā)更新導(dǎo)致的數(shù)據(jù)不一致和更新丟失。
以下是版本控制的基本步驟:
-
檢查版本號(hào):當(dāng)接收到一個(gè)更新請(qǐng)求時(shí),Elasticsearch 會(huì)檢查請(qǐng)求中的版本號(hào)。如果請(qǐng)求中的版本號(hào)與當(dāng)前文檔的版本號(hào)不匹配,Elasticsearch 會(huì)拒絕這個(gè)更新請(qǐng)求。
-
更新文檔:如果版本號(hào)匹配,Elasticsearch 會(huì)進(jìn)行更新操作,包括更新倒排列表、存儲(chǔ)新的文檔內(nèi)容和元數(shù)據(jù)等。
-
更新版本號(hào):完成更新操作后,Elasticsearch 會(huì)將文檔的版本號(hào)加一。新的版本號(hào)會(huì)被存儲(chǔ)在文檔的元數(shù)據(jù)中,也會(huì)被返回給用戶。
-
復(fù)制更新:為了保持?jǐn)?shù)據(jù)的一致性,Elasticsearch 會(huì)將包含新的版本號(hào)的更新操作復(fù)制到所有的副本分片。
3.4、數(shù)據(jù)復(fù)制
在 Elasticsearch 中,為了提高數(shù)據(jù)的可用性和搜索性能,每個(gè)文檔都會(huì)被復(fù)制到一個(gè)或多個(gè)副本分片中。因此,當(dāng)更新倒排列表時(shí),也需要將這個(gè)更新操作復(fù)制到所有的副本分片。
以下是數(shù)據(jù)復(fù)制的基本步驟:
-
發(fā)送復(fù)制請(qǐng)求:當(dāng)主分片完成了更新操作后,它會(huì)將這個(gè)更新操作以請(qǐng)求的形式發(fā)送給所有的副本分片。
-
應(yīng)用更新操作:副本分片收到復(fù)制請(qǐng)求后,會(huì)按照相同的步驟應(yīng)用這個(gè)更新操作,包括更新倒排列表、存儲(chǔ)新的文檔內(nèi)容和元數(shù)據(jù)等。
-
確認(rèn)更新:副本分片完成更新操作后,會(huì)向主分片發(fā)送一個(gè)確認(rèn)響應(yīng)。
-
等待所有確認(rèn):主分片會(huì)等待所有副本分片的確認(rèn)響應(yīng)。當(dāng)所有副本分片都確認(rèn)更新操作成功后,主分片才會(huì)向用戶發(fā)送一個(gè)確認(rèn)響應(yīng)。
以上就是 Elasticsearch 更新倒排列表時(shí)的數(shù)據(jù)復(fù)制過程。需要注意的是,這個(gè)過程可能會(huì)受到網(wǎng)絡(luò)條件、副本分片的狀態(tài)、集群的配置等因素的影響。
4、數(shù)據(jù)刪除原理
4.1、數(shù)據(jù)刪除原理
在 Elasticsearch 中,數(shù)據(jù)的刪除并不是立即從磁盤中移除數(shù)據(jù),而是通過標(biāo)記的方式來實(shí)現(xiàn)的。
以下是 Elasticsearch 數(shù)據(jù)刪除的基本步驟:
- 標(biāo)記刪除:當(dāng)接收到一個(gè)刪除請(qǐng)求時(shí),Elasticsearch 不會(huì)立即刪除數(shù)據(jù),而是將對(duì)應(yīng)的文檔標(biāo)記為已刪除。
- 更新倒排索引:雖然文檔被標(biāo)記為已刪除,但是它的詞項(xiàng)仍然存在于倒排索引中。因此,Elasticsearch 會(huì)更新倒排索引,將已刪除文檔的詞項(xiàng)從倒排索引中移除。
- 復(fù)制刪除:為了保持?jǐn)?shù)據(jù)的一致性,Elasticsearch 會(huì)將刪除操作復(fù)制到所有的副本分片。
- 確認(rèn)刪除:當(dāng)刪除操作被成功應(yīng)用到主分片和所有副本分片后,Elasticsearch 會(huì)向用戶發(fā)送一個(gè)確認(rèn)響應(yīng)。
- 物理刪除:被標(biāo)記為已刪除的文檔在一段時(shí)間后,會(huì)在后臺(tái)的合并(Segment Merging)過程中被物理刪除。
以上就是 Elasticsearch 數(shù)據(jù)刪除的基本原理。需要注意的是,這個(gè)過程可能會(huì)受到網(wǎng)絡(luò)條件、副本分片的狀態(tài)、集群的配置等因素的影響。
4.2、刪除數(shù)據(jù)的恢復(fù)
在 Elasticsearch 中,一旦數(shù)據(jù)被刪除,就無法直接恢復(fù)。這是因?yàn)?Elasticsearch 的刪除操作是不可逆的,一旦一個(gè)文檔被標(biāo)記為已刪除,就無法取消這個(gè)標(biāo)記。
然而,你可以通過以下方式來盡可能地恢復(fù)被刪除的數(shù)據(jù):
-
備份和恢復(fù):如果你有定期備份 Elasticsearch 數(shù)據(jù),你可以從備份中恢復(fù)被刪除的數(shù)據(jù)。Elasticsearch 提供了 Snapshot 和 Restore 功能,可以用來備份和恢復(fù)整個(gè)集群的數(shù)據(jù)。
-
重新索引:如果被刪除的數(shù)據(jù)仍然存在于原始數(shù)據(jù)源中,你可以重新索引這些數(shù)據(jù)。這需要你有一個(gè)完整的數(shù)據(jù)源,并且知道如何從數(shù)據(jù)源中提取和索引數(shù)據(jù)。
-
使用軟刪除:在某些情況下,你可能希望保留被刪除的數(shù)據(jù),以便于以后恢復(fù)。這時(shí),你可以使用軟刪除(Soft Delete)功能。軟刪除并不會(huì)真正刪除數(shù)據(jù),而是將數(shù)據(jù)標(biāo)記為已刪除。你可以在需要時(shí)取消這個(gè)標(biāo)記,從而恢復(fù)數(shù)據(jù)。文章來源:http://www.zghlxwxcb.cn/news/detail-712899.html
需要注意的是,以上方法都有一定的限制,并不能保證100%恢復(fù)被刪除的數(shù)據(jù)。因此,最好的策略還是定期備份數(shù)據(jù),以防止數(shù)據(jù)丟失。文章來源地址http://www.zghlxwxcb.cn/news/detail-712899.html
到了這里,關(guān)于Elasticsearch數(shù)據(jù)操作原理的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!