国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

ElasticSearch與Lucene是什么關(guān)系?Lucene又是什么?

這篇具有很好參考價值的文章主要介紹了ElasticSearch與Lucene是什么關(guān)系?Lucene又是什么?。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一. ElasticSearch 與 Lucene 的關(guān)系

Elasticsearch(ES)和Apache Lucene之間有密切的關(guān)系,可以總結(jié)如下:

  1. Elasticsearch構(gòu)建于Lucene之上:Elasticsearch實際上是一個分布式的、實時的搜索和分析引擎,它構(gòu)建在Apache Lucene搜索引擎庫的基礎(chǔ)上。Lucene提供了全文搜索和索引功能,而Elasticsearch在此基礎(chǔ)上構(gòu)建了更多功能,如分布式性能、實時數(shù)據(jù)索引、聚合分析、RESTful API等。

  2. Elasticsearch的高級功能:Elasticsearch擴(kuò)展了Lucene,并提供了一種更高級的搜索和分析功能。它支持JSON文檔存儲,分布式架構(gòu),復(fù)雜的查詢語言,實時索引等。

  3. 簡化的API:Elasticsearch提供了一個簡化的RESTful API,使其更易于使用和集成到應(yīng)用程序中。這使得開發(fā)人員能夠輕松地構(gòu)建搜索和分析功能,而無需深入了解Lucene的復(fù)雜性。

  4. 分布式和水平擴(kuò)展:Elasticsearch專注于分布式搜索和分析,可以輕松擴(kuò)展到數(shù)百臺甚至數(shù)千臺服務(wù)器。這使得它成為大規(guī)模數(shù)據(jù)處理和分析的有力工具。

  5. 動態(tài)索引:Elasticsearch具有實時索引功能,可以實時更新和檢索數(shù)據(jù),適用于大量數(shù)據(jù)的變化和分析。

1.1 結(jié)構(gòu)關(guān)系圖

es和lucene的關(guān)系,elasticsearch,elasticsearch,lucene,大數(shù)據(jù)

Lucene是Apache下的一個子項目,是一個開放源代碼的全文檢索引擎工具包,但它不是一個完整的全文檢索引擎,而是一個全文檢索引擎的架構(gòu),提供了完整的查詢引擎和索引引擎,它是ES實現(xiàn)全文檢索的核心基礎(chǔ),索引文檔以及搜索索引的的核心流程都是在Lucene中完成的。

1.2 整體處理流程

es和lucene的關(guān)系,elasticsearch,elasticsearch,lucene,大數(shù)據(jù)

二. Apache Lucene 概述

es和lucene的關(guān)系,elasticsearch,elasticsearch,lucene,大數(shù)據(jù)


2.1 Lucene介紹

Lucene是Apache下的一個開放源代碼的全文檢索引擎工具包。提供了完整的查詢引擎和索引引擎,部分文本分析引擎(英文與德文兩種西方語言)。Lucene的目的是為軟件開發(fā)人員提供一個簡單易用的工具包,以方便的在目標(biāo)系統(tǒng)中實現(xiàn)全文檢索的功能??梢允褂肔ucene實現(xiàn)全文檢索。


2.2 Lucene適用場景

這項技術(shù)幾乎適用于任何需要結(jié)構(gòu)化搜索、全文搜索、分面、跨高維向量的最近鄰搜索、拼寫糾正或查詢建議的應(yīng)用程序。

  • 在應(yīng)用中為數(shù)據(jù)庫中的數(shù)據(jù)提供全文檢索實現(xiàn)。
  • 開發(fā)獨立的搜索引擎服務(wù)、系統(tǒng)。
  • 對于數(shù)據(jù)量大、數(shù)據(jù)結(jié)構(gòu)不固定的數(shù)據(jù)可采用全文檢索方式搜索。

2.3 Lucene功能

Lucene通過一個簡單的API提供了強(qiáng)大的功能。

1.可擴(kuò)展的高性能索引
  • 在現(xiàn)代硬件上超過800GB/小時
  • 小RAM要求——只有1MB堆
  • 增量索引與批量索引一樣快
  • 索引大小大約為索引文本大小的20-30%
2.強(qiáng)大、準(zhǔn)確、高效的搜索算法
  • 排名搜索——最好的結(jié)果首先返回
  • 許多強(qiáng)大的查詢類型:短語查詢、通配符查詢、鄰近查詢、范圍查詢等
  • 現(xiàn)場搜索(例如標(biāo)題、作者、內(nèi)容)
  • 高維向量的最近鄰搜索
  • 按任何字段排序
  • 合并結(jié)果的多索引搜索
  • 允許同時更新和搜索
  • 靈活的刻面、突出顯示、連接和結(jié)果分組
  • 快速、節(jié)省內(nèi)存和容錯的建議器
  • 可插拔排名模型,包括向量空間模型和Okapi BM25
  • 可配置的存儲引擎(編解碼器)
3.跨平臺解決方案
  • 可作為Apache許可證下的開源軟件,它允許您在商業(yè)和開源程序中使用Lucene
  • 100%純Java
  • 其他可用的與索引兼容的編程語言的實現(xiàn)

2.4 Lucene架構(gòu)

結(jié)構(gòu)化數(shù)據(jù)搜索與非結(jié)構(gòu)化數(shù)據(jù)搜索對比分析見下圖:?

es和lucene的關(guān)系,elasticsearch,elasticsearch,lucene,大數(shù)據(jù)搜索應(yīng)用程序和Lucene之間的關(guān)系,也反映了利用Lucene構(gòu)建搜索應(yīng)用程序的流程:

es和lucene的關(guān)系,elasticsearch,elasticsearch,lucene,大數(shù)據(jù)


三. Lucene 基本概念

在深入解讀Lucene之前,先了解下Lucene的幾個基本概念,以及這幾個概念背后隱藏的一些內(nèi)容。

es和lucene的關(guān)系,elasticsearch,elasticsearch,lucene,大數(shù)據(jù)

3.1 Index(索引)

類似數(shù)據(jù)庫的表的概念,但是與傳統(tǒng)表的概念會有很大的不同。傳統(tǒng)關(guān)系型數(shù)據(jù)庫或者NoSQL數(shù)據(jù)庫的表,在創(chuàng)建時至少要定義表的Scheme,定義表的主鍵或列等,會有一些明確定義的約束。而Lucene的Index,則完全沒有約束。Lucene的Index可以理解為一個文檔收納箱,你可以往內(nèi)部塞入新的文檔,或者從里面拿出文檔,但如果你要修改里面的某個文檔,則必須先拿出來修改后再塞回去。這個收納箱可以塞入各種類型的文檔,文檔里的內(nèi)容可以任意定義,Lucene都能對其進(jìn)行索引。

3.2 Document(文檔)

用戶提供的源是一條條記錄,它們可以是文本文件、字符串或者數(shù)據(jù)庫表的一條記錄等等。一條記錄經(jīng)過索引之后,就是以一個Document的形式存儲在索引文件中的。用戶進(jìn)行搜索,也是以Document列表的形式返回。

一個Index內(nèi)會包含多個Document。寫入Index的Document會被分配一個唯一的ID,即Sequence Number(序列號,更多被叫做DocId)。

3.3 Field(字段)

一個Document會由一個或多個Field組成,F(xiàn)ield是Lucene中數(shù)據(jù)索引的最小定義單位。Lucene提供多種不同類型的Field,例如StringField、TextField、LongFiled或NumericDocValuesField等,Lucene根據(jù)Field的類型(FieldType)來判斷該數(shù)據(jù)要采用哪種類型的索引方式(Invert Index、Store Field、DocValues或N-dimensional等)。

例如,一篇文章可以包含“標(biāo)題”、“正文”、“最后修改時間”等信息域,這些信息域就是通過Field在Document中存儲的。

Field有兩個屬性可選:存儲和索引。通過存儲屬性你可以控制是否對這個Field進(jìn)行存儲;通過索引屬性你可以控制是否對該Field進(jìn)行索引。

如果對標(biāo)題和正文進(jìn)行全文搜索,所以我們要把索引屬性設(shè)置為真,同時我們希望能直接從搜索結(jié)果中提取文章標(biāo)題,所以我們把標(biāo)題域的存儲屬性設(shè)置為真。但是由于正文域太大了,我們?yōu)榱丝s小索引文件大小,將正文域的存儲屬性設(shè)置為假,當(dāng)需要時再直接讀取文件;我們只是希望能從搜索解果中提取最后修改時間,不需要對它進(jìn)行搜索,所以我們把最后修改時間域的存儲屬性設(shè)置為真,索引屬性設(shè)置為假。上面的三個域涵蓋了兩個屬性的三種組合,還有一種全為假的沒有用到,事實上Field不允許你那么設(shè)置,因為既不存儲又不索引的域是沒有意義的。

3.4 Term和Term Dictionary

Lucene中索引和搜索的最小單位,一個Field會由一個或多個Term組成,Term是由Field經(jīng)過Analyzer(分詞)產(chǎn)生。Term Dictionary即Term詞典,是根據(jù)條件查找Term的基本索引。

Term由兩部分組成:它表示的詞語和這個詞語所出現(xiàn)的Field的名稱。

3.5 Segment(段)

一個Index會由一個或多個sub-index構(gòu)成,sub-index被稱為Segment。Lucene的Segment設(shè)計思想,與LSM類似但又有些不同,繼承了LSM中數(shù)據(jù)寫入的優(yōu)點,但是在查詢上只能提供近實時而非實時查詢。

Lucene中的數(shù)據(jù)寫入會先寫內(nèi)存的一個Buffer(類似LSM的MemTable,但是不可讀),當(dāng)Buffer內(nèi)數(shù)據(jù)到一定量后會被Flush成一個Segment,每個Segment有自己獨立的索引,可獨立被查詢,但數(shù)據(jù)永遠(yuǎn)不能被更改。這種模式避免了隨機(jī)寫,數(shù)據(jù)寫入都是Batch和Append,能達(dá)到很高的吞吐量。Segment中寫入的文檔不可被修改,但可被刪除,刪除的方式也不是在文件內(nèi)部原地更改,而是會由另外一個文件保存需要被刪除的文檔的DocID,保證數(shù)據(jù)文件不可被修改。Index的查詢需要對多個Segment進(jìn)行查詢并對結(jié)果進(jìn)行合并,還需要處理被刪除的文檔,為了對查詢進(jìn)行優(yōu)化,Lucene會有策略對多個Segment進(jìn)行合并,這點與LSM對SSTable的Merge類似。

Segment在被Flush或Commit之前,數(shù)據(jù)保存在內(nèi)存中,是不可被搜索的,這也就是為什么Lucene被稱為提供近實時而非實時查詢的原因。讀了它的代碼后,發(fā)現(xiàn)它并不是不能實現(xiàn)數(shù)據(jù)寫入即可查,只是實現(xiàn)起來比較復(fù)雜。原因是Lucene中數(shù)據(jù)搜索依賴構(gòu)建的索引(例如倒排依賴Term Dictionary),Lucene中對數(shù)據(jù)索引的構(gòu)建會在Segment Flush時,而非實時構(gòu)建,目的是為了構(gòu)建最高效索引。當(dāng)然它可引入另外一套索引機(jī)制,在數(shù)據(jù)實時寫入時即構(gòu)建,但這套索引實現(xiàn)會與當(dāng)前Segment內(nèi)索引不同,需要引入額外的寫入時索引以及另外一套查詢機(jī)制,有一定復(fù)雜度。

3.6 Sequence Number(序列號)

Sequence Number(后面統(tǒng)一叫DocId)是Lucene中一個很重要的概念,數(shù)據(jù)庫內(nèi)通過主鍵來唯一標(biāo)識一行記錄,而Lucene的Index通過DocId來唯一標(biāo)識一個Doc。不過有幾點要特別注意:

  1. DocId實際上并不在Index內(nèi)唯一,而是Segment內(nèi)唯一,Lucene這么做主要是為了做寫入和壓縮優(yōu)化。那既然在Segment內(nèi)才唯一,又是怎么做到在Index級別來唯一標(biāo)識一個Doc呢?方案很簡單,Segment之間是有順序的,舉個簡單的例子,一個Index內(nèi)有兩個Segment,每個Segment內(nèi)分別有100個Doc,在Segment內(nèi)DocId都是0-100,轉(zhuǎn)換到Index級的DocId,需要將第二個Segment的DocId范圍轉(zhuǎn)換為100-200。
  2. DocId在Segment內(nèi)唯一,取值從0開始遞增。但不代表DocId取值一定是連續(xù)的,如果有Doc被刪除,那可能會存在空洞。
  3. 一個文檔對應(yīng)的DocId可能會發(fā)生變化,主要是發(fā)生在Segment合并時。

Lucene內(nèi)最核心的倒排索引,本質(zhì)上就是Term到所有包含該Term的文檔的DocId列表的映射。所以Lucene內(nèi)部在搜索的時候會是一個兩階段的查詢,第一階段是通過給定的Term的條件找到所有Doc的DocId列表,第二階段是根據(jù)DocId查找Doc。Lucene提供基于Term的搜索功能,也提供基于DocId的查詢功能。

DocId采用一個從0開始底層的Int32值,是一個比較大的優(yōu)化,同時體現(xiàn)在數(shù)據(jù)壓縮和查詢效率上。例如數(shù)據(jù)壓縮上的Delta策略、ZigZag編碼,以及倒排列表上采用的SkipList等,這些優(yōu)化后續(xù)會詳述。?


感謝您的閱讀,別忘了點贊、關(guān)注、收藏一波~ Thanks?(?ω?)? ??文章來源地址http://www.zghlxwxcb.cn/news/detail-765928.html

到了這里,關(guān)于ElasticSearch與Lucene是什么關(guān)系?Lucene又是什么?的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 《面試1v1》ElasticSearch 和 Lucene

    《面試1v1》ElasticSearch 和 Lucene

    ?? 作者簡介:王哥,CSDN2022博客總榜Top100??、博客專家?? ?? 技術(shù)交流:定期更新Java硬核干貨,不定期送書活動 ?? 王哥多年工作總結(jié):Java學(xué)習(xí)路線總結(jié), 點擊 突擊面試 ?? 數(shù)十萬人的面試選擇: 面試說人話系列《面試1v1》 我是 javapub,一名 Markdown 程序員從?????,

    2024年02月14日
    瀏覽(18)
  • Lucene和Solr和Elasticsearch區(qū)別,全文檢索引擎工具包Lucene索引流程和搜索流程實操

    Lucene和Solr和Elasticsearch區(qū)別,全文檢索引擎工具包Lucene索引流程和搜索流程實操

    我們生活中的數(shù)據(jù)總體分為兩種: 結(jié)構(gòu)化數(shù)據(jù)和非結(jié)構(gòu)化數(shù)據(jù) 。 結(jié)構(gòu)化數(shù)據(jù) :指具有固定格式或有限長度的數(shù)據(jù),如數(shù)據(jù)庫,元數(shù)據(jù)等。 非結(jié)構(gòu)化數(shù)據(jù) :指不定長或無固定格式的數(shù)據(jù),如 互聯(lián)網(wǎng)數(shù)據(jù)、郵件,word文檔等。 非結(jié)構(gòu)化數(shù)據(jù)又有一種叫法叫全文數(shù)據(jù) 按照數(shù)據(jù)的

    2024年02月03日
    瀏覽(28)
  • 掌握它才說明你真正懂 Elasticsearch - Lucene (一)

    Lucene 簡介 Lucene 是一種高性能、可伸縮的信息搜索(IR)庫,在 2000 年開源,最初由鼎鼎大名的 Doug Cutting 開發(fā),是基于 Java 實現(xiàn)的高性能的開源項目。 Lucene 采用了基于倒排表的設(shè)計原理,可以非常高效地實現(xiàn)文本查找,在底層采用了分段的存儲模式,使它在讀寫時幾乎完全

    2024年02月03日
    瀏覽(19)
  • 從根上理解elasticsearch(lucene)查詢原理(1)-lucece查詢邏輯介紹

    從根上理解elasticsearch(lucene)查詢原理(1)-lucece查詢邏輯介紹

    大家好,最近在做一些elasticsearch 慢查詢優(yōu)化的事情,通常用分析elasticsearch 慢查詢的時候可以通過profile api 去分析,分析結(jié)果顯示的底層lucene在搜索過程中使用到的函數(shù)調(diào)用。所以要想徹底弄懂elasticsearch慢查詢的原因,還必須將lucene的查詢原理搞懂,今天我們就先來介紹下

    2024年02月04日
    瀏覽(20)
  • ElasticSearch學(xué)習(xí)篇10_Lucene數(shù)據(jù)存儲之BKD動態(tài)磁盤樹

    ElasticSearch學(xué)習(xí)篇10_Lucene數(shù)據(jù)存儲之BKD動態(tài)磁盤樹

    基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu)如二叉樹衍生的的平衡二叉搜索樹通過左旋右旋調(diào)整樹的平衡維護(hù)數(shù)據(jù),靠著二分算法能滿足一維度數(shù)據(jù)的logN時間復(fù)雜度的近似搜索。對于大規(guī)模多維度數(shù)據(jù)近似搜索,Lucene采用一種BKD結(jié)構(gòu),該結(jié)構(gòu)能很好的空間利用率和性能。 本片博客主要學(xué)習(xí)常見的多維

    2024年03月15日
    瀏覽(24)
  • ElasticSearch學(xué)習(xí)篇8_Lucene之?dāng)?shù)據(jù)存儲(Stored Field、DocValue、BKD Tree)

    ElasticSearch學(xué)習(xí)篇8_Lucene之?dāng)?shù)據(jù)存儲(Stored Field、DocValue、BKD Tree)

    Lucene全文檢索主要分為索引、搜索兩個過程,對于索引過程就是將文檔磁盤存儲然后按照指定格式構(gòu)建索引文件,其中涉及數(shù)據(jù)存儲一些壓縮、數(shù)據(jù)結(jié)構(gòu)設(shè)計還是很巧妙的,下面主要記錄學(xué)習(xí)過程中的StoredField、DocValue以及磁盤BKD Tree的一些相關(guān)知識。 參考: https://juejin.cn/p

    2024年02月03日
    瀏覽(65)
  • ClassNotFoundException: org.elasticsearch.client.Cancellable  和nosuchfielderror:lucene_8_0_0

    ClassNotFoundException: org.elasticsearch.client.Cancellable 和nosuchfielderror:lucene_8_0_0

    一天時間都在解決這個問題。做一下筆記吧 在做springcloud整合es7.6.2出現(xiàn)了一些問題。 兩個主要的報錯: 先解決第一個: ClassNotFoundException: org.elasticsearch.client.Cancellable 我的maven配置 配置類也配置了 然后在啟動時就報了以下錯誤 看了一下相關(guān)的博客,得出是版本依賴不一致的

    2024年02月04日
    瀏覽(21)
  • elasticsearch中的數(shù)據(jù)類型search_as_you_type及查看底層Lucene索引

    elasticsearch中的數(shù)據(jù)類型search_as_you_type及查看底層Lucene索引

    search_as_you_type字段類型用于自動補(bǔ)全,當(dāng)用戶輸入搜索的時候,還沒輸完就可以提示用戶相關(guān)內(nèi)容。as_you_type應(yīng)該是說當(dāng)你打字的時候。它會給索引里的這個類型的字段添加一些子字段_2gram _3gram和_index_prefix。_2gram的意思是,如果一個值是abcd, 2 gram就是ab bc cd, 3 gram就是

    2024年02月12日
    瀏覽(21)
  • lucene、solr、es的區(qū)別以及應(yīng)用場景

    Lucene、Solr 和 Elasticsearch(ES) 都是基于 Lucene 引擎的搜索引擎,它們之間有相似之處,但也有一些不同之處。 Lucene 是一個低級別的搜索引擎庫,它提供了一種用于創(chuàng)建和維護(hù)全文索引的 API,以及一些搜索和排序算法。Lucene 主要用于構(gòu)建自定義搜索引擎,例如在 Java 應(yīng)用程序中

    2024年02月15日
    瀏覽(18)
  • ChatGPT 學(xué)習(xí) ES & lucene 底層寫入原理,源碼

    ChatGPT 學(xué)習(xí) ES & lucene 底層寫入原理,源碼

    一直有個疑問“學(xué)習(xí)最新版lucene 數(shù)據(jù)寫入相關(guān)的源碼,應(yīng)該看哪些源碼,以什么順序看(先看什么,后看什么)?” 在學(xué)習(xí)Lucene的數(shù)據(jù)寫入相關(guān)的源碼時,可以按照以下階段的順序進(jìn)行學(xué)習(xí)和理解,以便更好地掌握Lucene的數(shù)據(jù)寫入過程。同時,也需要了解一些相關(guān)的類和方

    2024年02月09日
    瀏覽(17)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包