ElasticSearch 索引、類型、文檔。接口的方式 CURD

參考文檔: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

查看文檔

查看的話,方法很多種。

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 查看
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章