Elasticsearch 之全文檢索與倒排索引

2022-06-19 22:54:17 字數 1725 閱讀 7257

elasticsearch 是一種高度可伸縮的全文檢索和分析引擎,其底層基於 apache lucene,lucene 本身早就是一種聞名於世的全文檢索和工具包。elasticsearch 在其基礎上進行了封裝,不僅繼承了 lucene 的所有優點,還大大降低了使用和開發的複雜度。

不僅如此,es 也擁有強大的資料儲存能力,它所檢索的資料不依賴於外部資料來源,而是由 es 統一管理。es 還具備建立資料分片和資料副本的能力,可以滿足大資料量下的高可用性和高效能要求。所以 es 也成歸類為一種基於文件的 nosql 資料庫,類似於 mongodb。而也是因為 es 強大的資料儲存能力,所以才有強大的檢索和分析能力。

elasticsearch 中的索引是倒排索引(inverted index),是一種專門應用於全文檢索的索引型別。

什麼叫做全文檢索?

資料檢索的目的是從一系列資料中,根據某一或某些資料特性將特定的資料找出來。從資料檢索的角度來看,資料大體上可以分為兩種型別:一種是結構化資料;另一種是非結構化資料。

結構化資料:將資料具有的特徵事先以結構化的形式定義好,資料有固定的格式或有限的長度。例如傳統關係型資料庫的表結構,資料特徵直接體現在表結構的字段上。

在實際的資料檢索中,通常是像文章、網頁、郵件這種全文本(full-text)資料的檢索需求佔大多數 ,因此形成了一門獨立學科,稱為全文檢索。在 elastic 官網中,經常稱全文本資料為全文資料,稱全文資料中的一條資料為文件(document),而稱儲存全文資料的資料庫為全文資料庫。

因此,簡單來說,全文檢索是指全文資料中檢索單個文件或文件集合的搜尋技術,而 elasticserach 從這個方面來說也可以理解為是乙個全文資料庫。 

全文檢索面臨什麼樣的問題?

與結構化資料查詢相比,全文檢索面臨的最大問題就是效能問題。全文檢索典型應用場景是根據一些關鍵字查詢包含這些關鍵字的文件,比如網際網路搜尋引擎要實現的功能就是根據一些關鍵字查詢網頁。如果沒有對文件進行特別的處理,查詢的辦法就只能逐條比對。效率非常低下。

如何解決全文檢索效率慢的問題?

關係型資料庫通過給字段新增索引,可以提公升資料查詢速度,有了索引欄位會根據字段值排序並建立類似排序二叉樹的資料結構(如b樹),然後利用二分查詢等演算法提公升查詢速度。但是給字段新增索引後,查詢速度提公升的同時會降低增加和刪除資料時的速度,並且還需要額外的空間儲存索引。這是典型的利用空間換取事件策略。

倒排索引先將文件中包含的關鍵字全部提取出來,然後再將關鍵字與文件的對應關係儲存起來,最後再對關鍵字本身做索引排序。全文檢索就是使用這種索引方式解決效率慢的問題。

倒排索引是如何工作的?

使用者在檢索某一關鍵字時,可以先對關鍵字的索引進行查詢,再通過關鍵字與文件的對應關係找到所在文件。如下:

文件一:i love yuki.

文件二:i love xixi。

針對以上兩個文件建立倒排索引,第一步先對文件提取關鍵字。對於英文來說按空格進行分隔即可,兩份文件共提取 i 、love、yuki 和 xixi 四個關鍵字。接下來就是建立關鍵字與文件之間的對應關係,即標識關鍵字被哪些文件包含:

序號關鍵字

文件一文件二1i

√√2love√√

3yuki√4

xixi

√根據倒排索引,使用者檢索就可以在倒排索引中快速定位到包含關鍵字的文件。倒排索引與關係型資料庫索引類似,都會根據關鍵字做排序。但關係型資料庫索引一般是對主鍵建立,然後索引指向資料內容;而倒排索引則正好相反,它是針對文件內容建立索引,然後索引指向主鍵(文件

一、二),這就是這種索引被稱為倒排索引的原因。

elasticsearch之mapping中元屬性

1.1 all是乙個特殊的字段,它把其他欄位的值用空格分開,作為乙個大string,進行檢索,預設不會對該字段進行單獨儲存。該欄位通常用於搜尋並不知道該值是否存在文件中,類似迷糊搜尋。例如下面的例子 搜尋包含johe smith 1970任何其中乙個的文件。get my index search 注...

全文搜尋之 Elasticsearch

elasticsearch es 是乙個基於 lucene 的開源搜尋引擎,它不但穩定 可靠 快速,而且也具有良好的水平擴充套件能力,是專門為分布式環境設計的。json 輸入 輸出格式為 json,意味著不需要定義 schema,快捷方便 restful 基本所有操作 索引 查詢 甚至是配置 都可以...

Elasticsearch 之 資料索引

對於提供全文檢索的工具來說,索引時乙個關鍵的過程 只有通過索引操作,才能對資料進行分析儲存 建立倒排索引,從而讓使用者查詢到相關的資訊。這樣就在索引twitter中的tweet型別中儲存了id為1的資料。索引操作的結果為 index twitter type tweet id 1 version 1...