1. 是什麼?
(1)Elasticsearch是一個基於Apache Lucene™的開源搜索引擎。無論在開源還是專有領域,Lucene可以被認爲是迄今爲止最 先進、性能最好的、功能最全的搜索引擎庫
(2)Elasticsearch也使用Java開發並使用Lucene作爲其核心來實現所有索引和搜索的功能,但是它的目的是通過簡單的 RESTful API 來隱藏Lucene的複雜性,從而讓全文搜索變得簡單
總之一句話,它很牛,也很複雜,但是他對外隱藏了這些內部實現,用它還是很簡單滴!
到這裏就有小夥伴有疑問了,不就一個搜索呀?好像用sql語句查詢也可呀,爲什麼要用這個東西呢?
聽我娓娓道來
2. 建立一個員工目錄
爲了方便理解,需要帶入一個場景中,以下都以這個場景爲主,這樣更好理解!
場景:假設我們剛好在阿里BaBa工作(人還是要有夢想的,當然夢裏想想就可以了),這時人力資源部門出於某種目的需要讓我們創建一個員工目錄,這個目錄 用於促進人文關 懷和用於實時協同工作,所以它有以下不同的需求:
- 數據能夠包含多個值的標籤、數字和純文本。
- 檢索任何員工的所有信息。
- 支持結構化搜索,
- 例如查找30歲以上的員工。
- 支持簡單的全文搜索和更復雜的短語(phrase)搜索 高亮搜索結果中的關鍵字
- 能夠利用圖表管理分析這些數據
這些有些可以通過sql語句做到,但是很消耗時間(全文搜索),有些比較麻煩,比如高亮關鍵字,圖表分析
然後我們來看看Elasticsearch是怎麼做的呢?
我們首先要做的是存儲員工數據,每個文檔代表一個員工。在Elasticsearch中存儲數據的行爲就叫做索引(indexing),不過 在索引之前,我們需要明確數據應該存儲在哪裏。 在Elasticsearch中,文檔歸屬於一種類型(type),而這些類型存在於索引(index)中,我們可以畫一些簡單的對比圖來類比傳統 關係型數據庫:
Relational DB -> Databases -> Tables -> Rows -> Columns
Elasticsearch -> Indices -> Types -> Documents -> Fields
Elasticsearch集羣可以包含多個索引(indices)(數據庫),每一個索引可以包含多個類型(types)(表),每一個類型包含多 個文檔(documents)(行),然後每個文檔包含多個字段(Fields)(列)。
記住只是類比,不能概念相等
所以爲了創建員工目錄,我們將進行如下操作:
- 爲每個員工的文檔(document)建立索引,每個文檔包含了相應員工的所有信息。
- 每個文檔的類型爲 employee 。
- employee 類型歸屬於索引 albb。
- albb索引存儲在Elasticsearch集羣中。
實際上這些都是很容易的(儘管看起來有許多步驟)。我們能通過一個命令執行完成的操作:
(沒安裝Elasticsearch的Elasticsearch下載安裝使用教程,,以下代碼是在Kibana中執行的,下載就可以使用Kibana下載安裝使用教程)
PUT /albb/employee/1
{
"first_name" : "John",
"last_name" : "Smith",
"age" : 25,
"about" : "I love to go rock climbing",
"interests": [ "sports", "music" ]
}
我們看到path: /albb/employee/1 包含三部分信息:
名字 | 說明 |
---|---|
albb | 索引名 |
employee | 類型名 |
1 | 這個員工的Id |
請求實體(JSON文檔),包含了這個員工的所有信息。他的名字叫“John Smith”,25歲,喜歡攀巖。
很簡單吧!它不需要你做額外的管理操作,比如創建索引或者定義每個字段的數據類型。我們能夠直接索引文檔, Elasticsearch已經內置所有的缺省設置,所有管理操作都是透明的。
接下來,讓我們在目錄中加入更多員工信息:
PUT /albb/employee/2
{
"first_name" : "Jane",
"last_name" : "Smith",
"age" : 32,
"about" : "I like to collect rock albums",
"interests": [ "music" ]
}
PUT /albb/employee/3
{
"first_name" : "Douglas",
"last_name" : "Fir",
"age" : 35,
"about": "I like to build cabinets",
"interests": [ "forestry" ]
}
好了,現在我們終於有了一些數據,可以以此開始學習搜索了,是不是很簡單呢?
寫作不易,你們的支持我繼續創作的動力!喜歡的話給我點個贊,關注一波吧!
下一篇 講述如何使用這些數據進行搜索得到結果
elasticsearch看這一篇就夠了—入門(2)Elasticsearch檢索文檔,DSL語句查詢,複雜查詢,全文搜索