Elasticsearch存儲方式
(1)面向文檔
Elasticsearch是面向文檔(document oriented)的,這意味着它可以存儲整個對象或文檔(document)。然而它不僅僅是存儲,還會索引(index)每個文檔的內容使之可以被搜索。在Elasticsearch中,你可以對文檔(而非成行成列的數據)進行索引、搜索、排序、過濾。這種理解數據的方式與以往完全不同,這也是Elasticsearch能夠執行復雜的全文搜索的原因之一。
(2)JSON
ELasticsearch使用Javascript對象符號(JavaScript Object Notation),也就是JSON,作爲文檔序列化格式。JSON現在已經被大多語言所支持,而且已經成爲NoSQL領域的標準格式。它簡潔、簡單且容易閱讀。
以下使用JSON文檔來表示一個用戶對象:
{
"email": "[email protected]",
"first_name": "John",
"last_name": "Smith",
"info": {
"bio": "Eco-warrior and defender of the weak",
"age": 25,
"interests": [ "dolphins", "whales" ]
},
"join_date": "2014/05/01"
}
儘管原始的user對象很複雜,但它的結構和對象的含義已經被完整的體現在JSON中了,在Elasticsearch中將對象轉化爲JSON並做索引要比在表結構中做相同的事情簡單的多。
Elasticsearch存儲結構
Mysql數據與ES數據轉化
- 元數據
創建文檔語句
PUT atguigu/doc
{
“name”:”zhangsan”,
“age”:10
}
_index:文檔所在索引名稱
_type:文檔所在類型名稱
_id:文檔唯一id
_uid:組合id,由_type和_id組成(6.x後,_type不再起作用,同_id)
_source:文檔的原始Json數據,包括每個字段的內容
_all:將所有字段內容整合起來,默認禁用(用於對所有字段內容檢索)
(2)名詞解釋
- 索引 index
一個索引就是一個擁有幾分相似特徵的文檔的集合。比如說,你可以有一個客戶數據的索引,另一個產品目錄的索引,還有一個訂單數據的索引。一個索引由一個名字來標識(必須全部是小寫字母的),並且當我們要對對應於這個索引中的文檔進行索引、搜索、更新和刪除的時候,都要使用到這個名字。在一個集羣中,可以定義任意多的索引。
- 類型 type
Es6之後,一個index中只能有一個type
在一個索引中,你可以定義一種或多種類型。一個類型是你的索引的一個邏輯上的分類/分區,其語義完全由你來定。通常,會爲具有一組共同字段的文檔定義一個類型。比如說,我們假設你運營一個博客平臺並且將你所有的數據存儲到一個索引中。在這個索引中,你可以爲用戶數據定義一個類型,爲博客數據定義另一個類型,當然,也可以爲評論數據定義另一個類型。
- 字段Field
相當於是數據表的字段,對文檔數據根據不同屬性進行的分類標識
- document
一個文檔是一個可被索引的基礎信息單元。比如,你可以擁有某一個客戶的文檔,某一個產品的一個文檔,當然,也可以擁有某個訂單的一個文檔。文檔以JSON(Javascript Object Notation)格式來表示,而JSON是一個到處存在的互聯網數據交互格式。在一個index/type裏面,你可以存儲任意多的文檔。注意,儘管一個文檔,物理上存在於一個索引之中,文檔必須被索引/賦予一個索引的type。