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

ElasticSearch:全文檢索及倒排索引原理

這篇具有很好參考價值的文章主要介紹了ElasticSearch:全文檢索及倒排索引原理。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

ElasticSearch:全文檢索及倒排索引原理,系統(tǒng)設計及業(yè)務積累,全文檢索,elasticsearch,倒排索引

1.從全文檢索說起

首先介紹一下結(jié)構化與非結(jié)構化數(shù)據(jù):

  • 結(jié)構化數(shù)據(jù)將數(shù)據(jù)具有的特征事先以結(jié)構化的形式定義好,數(shù)據(jù)有固定的格式或有限的長度。典型的結(jié)構化數(shù)據(jù)就是傳統(tǒng)關系型數(shù)據(jù)庫的表結(jié)構,數(shù)據(jù)特征直接體現(xiàn)在表結(jié)構的字段上,所以根據(jù)某一特征做數(shù)據(jù)檢索很直接,速度也比較快
  • 非結(jié)構化數(shù)據(jù)沒有預先定義好的結(jié)構化特征,也沒有固定格式和固定長度。典型的非結(jié)構化數(shù)據(jù)包括文章、圖片、視頻、網(wǎng)頁、郵件等,其中像HTML網(wǎng)頁這種具有一定格式的文檔也稱為半結(jié)構化數(shù)據(jù)

對于非結(jié)構化的數(shù)據(jù)檢索,被稱為全文檢索。

假設現(xiàn)在MySQL中有一張User表,含有三個階段:姓名name、年齡age和愛好favor:
ElasticSearch:全文檢索及倒排索引原理,系統(tǒng)設計及業(yè)務積累,全文檢索,elasticsearch,倒排索引

對于User表來說,整體上是結(jié)構化的,比如name、age都可以直接建立索引來快速地檢索。
而其中的favor字段是一個text類型,存儲的是非結(jié)構化的文本數(shù)據(jù):
籃球、足球、愛運動的我;本人熱愛學習,游戲偶爾也玩?。。。?/p>

與結(jié)構化查詢相比,全文檢索面臨的最大問題就是性能問題。全文檢索最一般的應用場景是根據(jù)一些關鍵字查找包含這些關鍵字的文檔,比如互聯(lián)網(wǎng)搜索引擎要實現(xiàn)的功能就是根據(jù)一些關鍵字查找網(wǎng)頁。顯然,如果沒有對文檔做特別處理,查找的辦法似乎只能是逐條比對。

假設現(xiàn)在需要找到favor中含有“足球”這個關鍵字的User,那么只能使用like模糊查詢:
select * from user where favor like '%足球%'

like語句是無法建立索引的,查詢時會進行全表掃描,并且在每個favor字段中進行遍歷匹配,以找到含有“足球”這個關鍵字的記錄,整體復雜度特別高,所以全文檢索也是MySQL這類結(jié)構關系式數(shù)據(jù)庫無法很好實現(xiàn)的需求。

全文檢索一般是查詢包含某一或某些關鍵字記錄,所以通過文檔整體值建立的索引對提高查詢速度是沒有任何幫助的。為了解決這個問題,人們創(chuàng)建了一種新索引方法,這種索引方法就是倒排索引。

2.倒排索引的原理

倒排索引是為了解決上述非結(jié)構化數(shù)據(jù)的檢索問題而產(chǎn)生的。

首先明確一下,在ES中存儲記錄的單位是JSON“文檔”,而JSON“文檔”中的“字段”也就是組成JSON的一個個KV對。

普通索引也被稱為正排索引,也就是通過對主鍵和結(jié)構化字段建立索引,通過這些結(jié)構化索引找到文檔。

倒排索引則是先將文檔中包含的關鍵字全部提取出來,然后再將關鍵字與文檔的對應關系保存起來,最后再對關鍵字本身做索引排序。用戶在檢索某一關鍵字時,可以先對關鍵字的索引進行查找,再通過關鍵字與文檔的對應關系找到所在文檔。

假設上述的User表通過ES存儲,其中兩個User文檔為:

{
    "_id: 1,
    "name":"pbr1",
    "age":22,
    "favor":"籃球、足球、愛運動的我;本人熱愛學習,游戲偶爾也玩!?。。?
}

{
    "_id: 2,
    "name":"pbr2",
    "age":22,
    "favor":"籃球、足球、愛運動的我"
}

其中favor定義為text類型,假設分詞器進行以下分詞:

  • 文檔1的favor分詞:“籃球”、“足球”、“愛運動的我”、“本人熱愛學習”、“游戲偶爾也玩”這5個token
  • 文檔2的favor分詞:“籃球”、“足球”、“愛運動的我”這3個token

那么對分詞token建立索引,并建立對原始文檔的映射,就得到一個以favor進行分詞的倒排索引:
ElasticSearch:全文檢索及倒排索引原理,系統(tǒng)設計及業(yè)務積累,全文檢索,elasticsearch,倒排索引

可以看到,倒排索引實際上就是對全文數(shù)據(jù)結(jié)構化的過程。對于存儲在關系型數(shù)據(jù)庫中的數(shù)據(jù)來說,它們依賴于人的預先分析將數(shù)據(jù)拆解為不同字段,所以在數(shù)據(jù)插入時就已經(jīng)是結(jié)構化的;而在全文數(shù)據(jù)庫中,文檔在插入時還不是結(jié)構化的,需要應用程序根據(jù)規(guī)則自動提取關鍵字,并形成關鍵字與文檔之間的結(jié)構化對應關系。

比如現(xiàn)在需要查詢愛好為“籃球”和“足球”的用戶,那么可以直接通過倒排索引拿到對應的文檔1和文檔2,也就查詢到了這兩個用戶。

3.ES索引構建過程

全文檢索中提取關鍵字是非常重要的一步。這些預先提取出來的關鍵字,在Elasticsearch及全文檢索的相關文獻中一般稱為詞項(Term),文檔的詞項提取在Elasticsearch中稱為文檔分析(Analysis),是整個全文檢索中較為核心的過程。這個過程必須要區(qū)分哪些是詞項,哪些不是。對于英文來說,它還必須要知道apple和apples指的同一個東西,而run和running指的是同一動作。對于中文來說就更麻煩了,因為中文詞語不以空格分隔,所以面臨的第一難題是如何將詞語分辨出來。

ES底層使用了Lucene來構建索引,一個基本的過程是先對text類型的字段進行分詞,分詞使用的分詞器以配置mapping時指定的為準,默認使用standard分詞器,對于中文分詞來說,一般建議使用ik_smart或ik_max_word分詞器:

ElasticSearch:全文檢索及倒排索引原理,系統(tǒng)設計及業(yè)務積累,全文檢索,elasticsearch,倒排索引

關于Lucene如何存儲這些分詞解析結(jié)果可以學習這篇文章:https://www.shenyanchao.cn/blog/2018/12/04/lucene-index-files/

由于文檔存儲前的分析和索引過程比較耗資源,所以為了提升性能,文檔在添加到ES中時并不會立即被編入索引。

默認情況下,ES會每隔1s統(tǒng)一處理一次新加入的文檔,可以通過index.refresh_interval參數(shù)修改。

為了提升性能,在ES 7中還添加了index.search.idle.after參數(shù),它的默認值是30s:如果索引在一段時間內(nèi)沒有收到檢索數(shù)據(jù)的請求,那么它至少要等30s后才會刷新索引數(shù)據(jù)。

所以可以看出ES的寫入操作實際上是準實時的,新添加到索引中的文檔可能在一段時間內(nèi)不能被檢索到,如果的確需要立即檢索到文檔可以使用強制刷新到索引的方式,包括使用_refresh接口和在操作文檔時使用refresh參數(shù)等進行強制刷新緩沖區(qū)中的索引到磁盤中。文章來源地址http://www.zghlxwxcb.cn/news/detail-629925.html

到了這里,關于ElasticSearch:全文檢索及倒排索引原理的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領支付寶紅包贊助服務器費用

相關文章

  • 大文本的全文檢索方案附件索引

    大文本的全文檢索方案附件索引

    Elasticsearch 附件索引是需要插件支持的功能,它允許將文件內(nèi)容附加到 Elasticsearch 文檔中,并對這些附件內(nèi)容進行全文檢索。本文將帶你了解索引附件的原理和使用方法,并通過一個實際示例來說明如何在 Elasticsearch 中索引和檢索文件附件。 索引附件的核心原理是通過 Inges

    2024年02月12日
    瀏覽(20)
  • 全文檢索-Elasticsearch-進階檢索

    全文檢索-Elasticsearch-進階檢索

    本文記錄谷粒商城高級篇的 Elasticsearch 進階檢索部分,續(xù)上之前記錄的 Elasticsearch入門篇。 ES 支持兩種基本方式檢索 : 一個是通過使用 REST request URI 發(fā)送搜索參數(shù)(uri + 檢索參數(shù)) 另一個是通過使用 REST request body 來發(fā)送它們(uri + 請求體) 請求體中寫查詢條件,語法: 示例

    2024年02月03日
    瀏覽(28)
  • Elasticsearch 全文檢索 分詞檢索-Elasticsearch文章四

    Elasticsearch 全文檢索 分詞檢索-Elasticsearch文章四

    https://www.elastic.co/guide/en/enterprise-search/current/start.html https://www.elastic.co/guide/en/elasticsearch/reference/7.17/query-dsl-match-query.html Full text Query中,我們只需要把如下的那么多點分為3大類,你的體系能力會大大提升 很多api都可以查得到,我們只要大概知道有支持哪些功能 Elasticsearch 執(zhí)行

    2024年02月14日
    瀏覽(24)
  • MySQL全文索引:中文語義分詞檢索(相似度匹配)

    MySQL全文索引:中文語義分詞檢索(相似度匹配)

    前些天發(fā)現(xiàn)了一個巨牛的人工智能學習網(wǎng)站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉(zhuǎn)到網(wǎng)站。 通常情況下,全文檢索引擎我們一般會用ES組件(傳送門:SpringBoot系列——ElasticSearch),但不是所有業(yè)務都有那么大的數(shù)據(jù)量、那么大的并發(fā)要求,MySQL5.7之后內(nèi)置

    2023年04月09日
    瀏覽(23)
  • ElasticSearch-全文檢索

    ElasticSearch-全文檢索

    https://www.elastic.co/cn/what-is/elasticsearch 全文搜索屬于最常見的需求,開源的Elasticsearch是目前全文搜索引擎的首選。 它可以快速地儲存、搜索和分析海量數(shù)據(jù)。 維基百科、StackOverflow、Github都采用它。 Elastic的底層是開源庫Lucene。但是,你沒法直接用Lucene,必須自己寫代碼去調(diào)用

    2024年04月17日
    瀏覽(26)
  • elasticsearch全文檢索

    傳送門 best_fields 傳送門 most_fields 當查詢多字段包含相同文本以不同方式分詞的時候此參數(shù)最有用, 傳送門 cross_fields phrase和phrase_prefix 傳送門 傳送門

    2024年02月07日
    瀏覽(33)
  • 圖數(shù)據(jù)庫Neo4J 中文分詞查詢及全文檢索(建立全文索引)

    圖數(shù)據(jù)庫Neo4J 中文分詞查詢及全文檢索(建立全文索引)

    Neo4j的全文索引是基于Lucene實現(xiàn)的,但是Lucene默認情況下只提供了基于英文的分詞器,下篇文章我們在討論中文分詞器(IK)的引用,本篇默認基于英文分詞來做。我們前邊文章就舉例說明過,比如我要搜索蘋果公司?首先我們要做的第一步在各個詞條上創(chuàng)建全文索引,第二步

    2024年02月03日
    瀏覽(22)
  • ElasticSearch 實戰(zhàn):ElasticSearch文檔全文檢索

    Elasticsearch 實戰(zhàn):Elasticsearch 文檔全文檢索 全文檢索是 Elasticsearch 的核心功能之一,它允許用戶對文本內(nèi)容進行高效的模糊搜索、詞組匹配、同義詞處理、停用詞過濾等操作。以下是如何進行文檔全文檢索的詳細步驟: **1. **全文匹配查詢(Match Query) 最基礎的全文檢索查詢是

    2024年04月11日
    瀏覽(29)
  • ES(Elasticsearch 全文檢索)

    ES(Elasticsearch 全文檢索)

    數(shù)據(jù)量大的時候 索引失效 =查詢性能低 功能比較弱 對文檔的內(nèi)容進行分詞,對詞條創(chuàng)建索引,記錄詞條所在的文檔信息根據(jù)詞條查詢到文檔的id 從而查到文檔 文檔:每一條數(shù)據(jù)就是一條文檔 詞條:文檔按照語義分成的詞語 正向索引 根據(jù)文檔的id創(chuàng)建索引 查詢詞條必須先找

    2024年02月05日
    瀏覽(52)
  • 全文檢索-Elasticsearch-整合SpringBoot

    全文檢索-Elasticsearch-整合SpringBoot

    前面記錄了 Elasticsearch 全文檢索的入門篇和進階檢索。這次我們來講下 Spring Boot 中如何整合 ES,以及如何在 Spring Cloud 微服務項目中使用 ES 來實現(xiàn)全文檢索,來達到商品檢索的功能。 檢索服務單獨作為一個服務,就稱作 gulimall-search 模塊。 點擊 Next 勾選 Spring Web 依賴,點擊

    2024年02月08日
    瀏覽(18)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領取紅包

二維碼2

領紅包