ElasticSearch所使用的倒排索引的思想和使用場景

zecoo發表於2016-12-10

背景:

在關聯式資料庫系統裡,索引是檢索資料最有效率的方式,。但對於搜尋引擎,它並不能滿足其特殊要求:
1)海量資料:搜尋引擎面對的是海量資料,像Google,百度這樣大型的商業搜尋引擎索引都是億級甚至百億級的網頁數量 ,面對如此海量資料 ,使得資料庫系統很難有效的管理。
2)資料操作簡單:搜尋引擎使用的資料操作簡單 ,一般而言 ,只需要增、 刪、 改、 查幾個功能 ,而且資料都有特定的格式 ,可以針對這些應用設計出簡單高效的應用程式。而一般的資料庫系統則支援大而全的功能 ,同時損失了速度和空間。最後 ,搜尋引擎面臨大量的使用者檢索需求 ,這要求搜尋引擎在檢索程式的設計上要分秒必爭 ,儘可能的將大運算量的工作在索引建立時完成 ,使檢索運算儘量的少。一般的資料庫系統很難承受如此大量的使用者請求 ,而且在檢索響應時間和檢索併發度上都不及我們專門設計的索引系統

何為倒排索引?

常見的正常索引

 

假設我們要通過id去查詢content,我們會將ID做成索引,加快我們的查詢

現在的問題是我們要去查到那些content中有b這兩個詞

首先想到的是依次去嘗試content中是否有b,顯然在時間複雜度上是很大的,尤其是資料庫中數量很多時

那麼如何去解決這個問題?

現在都需要引入倒排索引的思想


我們已content做成索引,這樣查詢ID的時間就快很多

跟正向的索引比較,也就是做了一個倒置,這就是倒排索引的思想

倒序索引定義:

也常被稱為反向索引、置入檔案或反向檔案,是一種索引方法,被用來儲存在全文搜尋下某個單詞在一個文件或者一組文件中的儲存位置的對映


那麼使用場景有哪些?

1、全文搜尋(搜尋引擎)

在一組文件中查詢某一單詞所在文件及位置

2、模糊匹配

通過使用者的輸入去匹配詞庫中符合條件的詞條

3、商品搜尋

通過商品的關鍵字去資料來源中查詢符合條件的商品

 



相關文章