參考文檔:https://blog.csdn.net/gwd1154978352/article/details/82740424
索引
索引是ElasticSearch存放數據的地方,可以理解爲Mysql中的一個數據庫。
你可以這麼理解,你不能就說他是
我們的數據被 存儲和索引在分片(shards)中,索引只是一個 把一個或多個分片分組在一起的邏輯空間。(就好像說)這是一些內部細節我們不用關心分片。
對於我們的程序而言,文檔存儲在索引(index)中。剩下的細節由Elasticsearch關心既可。(索引的名字必須是全部小寫,不能以下劃線開頭,不能包含逗號)
類型
類型用於區分同一個索引下不同的數據類型,相當於MySQL中的表。在Elasticsearch中,我們使用相同類型(type)的文檔表示相同的“事物”,因爲他們的數據結構也是相同的。每個類型(type)都有自己的映射(mapping)或者結構定義,就像傳統數據庫表中的列一樣。所有類型下的文檔被存儲在同一個索引下,但是類型的映射(mapping)會告訴Elasticsearch不同的文檔如何被索引。
這個還是比較好理解的
注:5.0版本之前,一個索引可以對應多個類型。5.0版本之後,一個索引只能對應一個類型
文檔
文檔是ElasticSearch中存儲的實體,類比MySQL,每個文檔相當於數據庫表中的一行數據。 在Elasticsearch中,文檔 (document) 這個術語有着特殊含義。它特指最頂層結構或者根對象(root object)序列化成的JSON數據(以唯一ID標識並存儲於Elasticsearch中)。
文檔由字段組成,相當於關係數據庫中列的屬性,不同的是ES的不同文檔可以具有不同的字段集合。
對比關係型數據庫:
Relational DB -> Databases -> Tables -> Rows -> Columns
Elasticsearch -> Indices -> Types -> Documents -> Fields
文檔元數據
一個文檔不只有數據。它還包含了元數據(metadata)——關於文檔的信息。三個必須的元數據節點是:
節點 | 說明 |
---|---|
_index | 文檔存儲的地方 |
_type | 文檔代表的對象的類 |
_id | 文檔的唯一標識 |
-
_index:索引
-
_type:類型
-
_id:id僅僅是一個字符串,它與_index和_type組合時,就可以在Elasticsearch中唯一標識一個文檔。當創建一個文檔,
你可以自定義_id,也可以讓Elasticsearch幫你自動生成。
說的也就是這個 ↓
索引創建的規則
-
類似的數據放在一個索引,非類似的數據放不同索引
-
index中包含了很多類似的document
-
索引名稱必須是小寫的,不能用下劃線開頭,不能包含逗號:product,website,blog
創建索引、類型、文檔(接口的方式)
剛纔大家也看到了我的截圖是在 Kibana上操作的,但現在書寫的是以 接口的方式創建,Kibana 會在後續更新出來。
就隨便寫寫
curl -H 'Content-Type:application/json' -XPUT http://localhost:9200/Only_for_you/testing_data/1 -d "
{
"private_id": "1",
"title": "This is an interesting piece of data",
"content": "I Really Really, really like you",
"tags": ["elasticsearch", "Love Letter"]
}"
執行後 就會OK了,大家看到我在 類型的後面寫了個 1,這個1 就代表了ID。如果不寫的話 系統會自動生成的id,長度爲20個字符,URL安全,base64編碼,GUID,分佈式系統並行生成時不可能會發生衝突。
就比如這條數據,我們更新他 更新就不要用 put了,會error
curl -H 'Content-Type:application/json' -XPOST http://localhost:9200/Only_for_you/testing_data/ -d "
{
"private_id": "1",
"title": "This is an interesting piece of data",
"content": "I Really Really, really like you",
"tags": ["elasticsearch", "Love Letter"]
}"
返回結果
{
"_index" : "Only_for_you",
"_type" : "testing_data",
"_id" : "oJVnqXIBlXk7LCfggxrl",
"_version" : 2,
"result" : "updated",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 2,
"_primary_term" : 1
}
這裏簡單的概述下:POST 和 PUT 上的區別
-
POST不用加具體的id,它是作用在一個集合資源之上的(/uri)
-
PUT操作是作用在一個具體資源之上的(/uri/xxx),所以要指定ID
查看文檔
查看的話,方法很多種。
-
瀏覽器直接 拼地址
-
使用ES瀏覽器插件
插件地址:https://download.csdn.net/download/weixin_44685869/12518847
我已經上傳到我的 CSDN上傳裏了,你們可以在那裏面找 -
在Linux中使用如下腳本:
curl -H 'Content-Type:application/json' -XGET http://localhost:9200/Only_for_you/testing_data/1?pretty
美化返回結果
返回的響應包含了現在熟悉的元數據節點,增加了_source
字段,它包含了在創建索引時我們發送給Elasticsearch的原始文檔。
-
pretty:在任意的查詢字符串中增加pretty參數,類似於上面的例子。會讓Elasticsearch美化輸出(pretty-print)JSON響應以便更加容易閱讀。
-
_source字段不會被美化,它的樣子與我們輸入的一致,現在只包含我們請求的字段,而且過濾了date字段。
如果你只想得到_source字段而不要其他的元數據,你可以這樣請求:
curl -H 'Content-Type:application/json' -XGET http://localhost:9200/Only_for_you/testing_data/1/_source
返回響應頭消息
請求返回的響應內容包括 {“found”: true}。這意味着文檔已經找到。如果我們請求一個不存在的文檔,依舊會得到一個JSON,不過found值變成了false。此外,HTTP響應狀態碼也會變成’404 Not Found’代替’200 OK’。我們可以在curl後加-i參數得到響應頭:
curl -H 'Content-Type:application/json' -i -XGET http://localhost:9200/Only_for_you/testing_data/1?pretty
返回結果:
HTTP/1.1 200 OK
content-type: application/json; charset=UTF-8
content-length: 337
*********** 以下數據省略 ************
更新文檔
curl -H 'Content-Type:application/json' -XPOST http://localhost:9200/Only_for_you/testing_data/1/_update -d '{
"script": "ctx._source.content = \"new content\""
刪除文檔
curl -XDELETE http://localhost:9200/blog/article/1
增刪改查 簡單的概述下
命令 | 含義 |
---|---|
POST | /uri 創建 |
DELETE | /uri/xxx 刪除 |
PUT | /uri/xxx 更新或創建 |
GET | /uri/xxx 查看 |