[hdu6989]Didn't I Say to Make My Abilities Average in the Next Life?!
簡介
全文搜尋屬於最常見的需求,開源的 Elasticsearch (以下簡稱 Elastic)是目前全文搜尋引擎的首選。它可以快速地儲存、搜尋和分析海量資料。
Elastic 的底層是開源庫 Lucene。但是,你沒法直接用 Lucene,必須自己寫程式碼去呼叫它的介面。Elastic 是 Lucene 的封裝,提供了 REST API 的操作介面,開箱即用。
重要特性:
-
分散式的實時檔案儲存,每個欄位都被索引並可被搜尋
-
實時分析的分散式搜尋引擎
-
可以擴充套件到上百臺伺服器,處理PB級結構化或非結構化資料
..........
官方文件:https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html
官方中文:https://www.elastic.co/guide/cn/elasticsearch/guide/current/foreword_id.html
基本概念
Index(索引)
相當於Mysql中的database,對於使用者來說是一個邏輯資料庫。雖然物理上會被分多個shard存放,也可能存放在多個node中。
Type(型別)
在 Index(索引)中,可以定義一個或多個型別。
類似於 MySQL 的 Table,每一種型別的資料存放在一起
在7.X的版本中去掉了Type(型別),原因是:
你知道的,為了搜尋······
我們一直認為ES中的“index”類似於關係型資料庫的“database”,而“type”相當於一個數據表。ES的開發者們認為這是一個糟糕的認識。例如:關係型資料庫中兩個資料表示是獨立的,即使他們裡面有相同名稱的列也不影響使用,但ES中不是這樣的。
我們都知道elasticsearch是基於Lucene開發的搜尋引擎,而ES中不同type下名稱相同的filed最終在Lucene中的處理方式是一樣的。舉個例子,兩個不同type下的兩個user_name,在ES同一個索引下其實被認為是同一個filed,你必須在兩個不同的type中定義相同的filed對映。否則,不同type中的相同欄位名稱就會在處理中出現衝突的情況,導致Lucene處理效率下降。
去掉type能夠使資料儲存在獨立的index中,這樣即使有相同的欄位名稱也不會出現衝突,就像ElasticSearch出現的第一句話一樣“你知道的,為了搜尋····”,去掉type就是為了提高ES處理資料的效率。
除此之外,在同一個索引的不同type下儲存欄位數不一樣的實體會導致儲存中出現稀疏資料,影響Lucene壓縮文件的能力,導致ES查詢效率的降低。
Document(文件)
儲存在某個 Index(索引)下,某種 Type(型別)的一個數據,Document(文件)是JSON格式的,Document 就像是 MySQL 中某個 Table 裡面每一行的資料,欄位就是Document裡的屬性。
Field(欄位)
相當於欄位、屬性
倒排索引
簡單一說
倒排索引(Inverted Index)也叫反向索引,有反向索引必有正向索引。通俗地來講,正向索引是通過key找value,反向索引則是通過value找key。