elasticsearch專用術(shù)語及基本用法

前言
昨天我們分享search的下載安裝過程。同時進行了一些簡單測試,今天我們來看下search的專業(yè)術(shù)語和基本用法。根據(jù)官方對elasticsearch的定位,我們可以說elasticsearc是一套面向文檔(json)的解決方案。下面我們就來看下,它到底是怎樣面向文檔的。
專用術(shù)語
索引
索引我們昨天已經(jīng)說過了,它其實就相當于傳統(tǒng)的關(guān)系型數(shù)據(jù)庫,一個 索引 類似于傳統(tǒng)關(guān)系數(shù)據(jù)庫中的一個 數(shù)據(jù)庫 ,是一個存儲關(guān)系型文檔的地方。索引 (index) 的復(fù)數(shù)詞為 indices 或 indexes 。
除此之外,索引還可以當作動詞來使用。索引一個文檔 就是存儲一個文檔到一個 索引 (名詞)中以便被檢索和查詢。這非常類似于 SQL語句中的 INSERT 關(guān)鍵詞,除了文檔已存在時,新文檔會替換舊文檔情況之外。
倒排索引
關(guān)系型數(shù)據(jù)庫通過增加一個 索引 比如一個 B樹(B-tree)索引 到指定的列上,以便提升數(shù)據(jù)檢索速度。Elasticsearch和 Lucene使用了一個叫做 倒排索引 的結(jié)構(gòu)來達到相同的目的。
默認的,一個文檔中的每一個屬性都是 被索引 的(有一個倒排索引)和可搜索的。一個沒有倒排索引的屬性是不能被搜索到的。
基本用法
新增數(shù)據(jù)(創(chuàng)建索引)
關(guān)于創(chuàng)建索引其實我們昨天已經(jīng)演示過了,但是昨天是為了測試,所以今天我們還需要再次補充說明下。
首先創(chuàng)建所以的語法如下:
curl -X PUT "localhost:9200/megacorp/employee/2?pretty" -H 'Content-Type: application/json' -d'
{
"name" : "syske",
"age" : 25,
"about" : "I love to read book",
"interests": [ "sports", "music" ]
}'
這里我們簡單介紹下上面的請求參數(shù):
megacorp:表示索引名稱,也就相當于我們傳統(tǒng)關(guān)系型數(shù)據(jù)庫中的數(shù)據(jù)庫,可以根據(jù)自己的需要指定employee:官方給出的說明是類型名稱,但我覺得應(yīng)該叫子索引更合理,就類似于傳統(tǒng)數(shù)據(jù)庫下面的數(shù)據(jù)表1:表示我們當前數(shù)據(jù)的id,也就是這條數(shù)據(jù)對應(yīng)的唯一索引請求體:下面的 json表示我們的請求體
昨天我們說了,es本身只支持GET, PUT, DELETE, HEAD,這里的PUT既可以表示新增,也可以表示更新,如果記錄存在,則進行更新操作,否則進行新增操作。關(guān)于這一點我們昨天也已經(jīng)演示過了,這里就不再贅述。
為了方便測試,我們后期的內(nèi)容直接在git bash下執(zhí)行curl命令了,windows下cmd體驗太差:

從上面返回結(jié)果來看,當文檔(json數(shù)據(jù))不存在的時候,它返回的result是created,但如果文檔已經(jīng)存在,它返回的結(jié)果是updated:

數(shù)據(jù)檢索
數(shù)據(jù)檢索也很簡單,直接發(fā)送GET請求即可:
curl -X GET "localhost:9200/megacorp/employee/1?pretty"
返回結(jié)果如下:
{
"_index" : "megacorp",
"_type" : "employee",
"_id" : "1",
"_version" : 1,
"_seq_no" : 0,
"_primary_term" : 1,
"found" : true,
"_source" : {
"name" : "syske",
"age" : 25,
"about" : "I love to read book",
"interests" : [
"sports",
"music"
]
}
}
我們先解釋下返回結(jié)果:
_index:索引_type:數(shù)據(jù)類型_id:數(shù)據(jù)id,這個是我們新增數(shù)據(jù)的時候指定的_version:數(shù)據(jù)版本,新增之后默認版本號為1,每更新一次,數(shù)據(jù)庫版本加一_seq_no:序號,主要用來記錄新增、更新和刪除的操作順序,對數(shù)據(jù)而言,通過這個字段可以確定數(shù)據(jù)創(chuàng)建順序(我自己覺得可以)_primary_term:和集群相關(guān)的一個數(shù)據(jù),應(yīng)該主要是為了標記節(jié)點號,根據(jù)資料顯示,這個數(shù)據(jù)在重啟后會發(fā)生變化。這個參數(shù)后面再研究吧。found:表示是否有搜索到數(shù)據(jù),如果未搜索到結(jié)果為false_source:查詢到的結(jié)果
這里說下請求地址后面這個參數(shù)pretty,這個參數(shù)的意思是對請求參數(shù)和返回結(jié)果進行美化,如果沒有這個參數(shù),我們看到的數(shù)據(jù)就會是一坨,不方便查看:

加了這個參數(shù),返回結(jié)果就好看多了:

數(shù)據(jù)更新
更新操作和新增是一模一樣的,這里我們就不做過多說明,唯一的區(qū)別是,如果返回結(jié)果result為updated,則表示數(shù)據(jù)更新成功:

數(shù)據(jù)刪除
刪除數(shù)據(jù)和查詢數(shù)據(jù)很像,只需要把GET替換成DELETE即可:
curl -X DELETE "localhost:9200/megacorp/employee/4?pretty" -H 'Content-Type: application/json'
返回結(jié)果result為deleted表示刪除成功。

如果數(shù)據(jù)不存在,則返回結(jié)果為not_found:

總結(jié)
由于時間的關(guān)系,今天暫時先分享這么多,專業(yè)術(shù)語我們暫時只說了索引,基本用法這塊現(xiàn)在也只分享了基本的增刪改查,確實節(jié)奏有點慢,但是暫時也沒辦法了,今天一整天都在處理oncall問題,也抽不出時間搞其他內(nèi)容了
,不過馬上就周末了,兩天時間不說把elasticsearch吃透,但是梳理下相關(guān)知識點,對它進行一個簡單的研究還是可以的
。好了,今天就先到這里吧,想了解更多知識點的小伙伴可以自己看官方文檔:
https://www.elastic.co/guide/cn/elasticsearch/guide/current/index.html
- END -