1. 程式人生 > 其它 >[hdu6989]Didn't I Say to Make My Abilities Average in the Next Life?!

[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。