1. 程式人生 > >Elasticsearch中document的基礎知識

Elasticsearch中document的基礎知識

元數據 不同 一個 返回 document elastics nbsp test 唯一標識

寫在前面的話:讀書破萬卷,編碼如有神
--------------------------------------------------------------------

參考內容:

  《Elasticsearch頂尖高手系列-快速入門篇》,中華石杉

--------------------------------------------------------------------

主要內容包括:

  • document的核心元數據
  • document id的手動指定和自動生成
  • document的_source元數據以及定制返回結果

--------------------------------------------------------------------

1、document的核心元數據

document的核心元數據有三個:_index、_type、_id

(1.1) _index元數據

  • 代表一個document存放在哪個index中
  • 類似的數據放在一個索引中,非類似的數據放在不同的索引中:product index(包含了所有的商品)、sales index(包含了所有的商品銷售數據)、inventory index(包含了所有庫存的相關數據)
  • index中包含了很多類似的document: 類似是什麽意思呢,其實指的就是說,這些document的fields很大一部分是相同的,你說你放了3個document,每個document的fields都完全不一樣,這就不是類似了,就不太適合放到一個index裏面去了
  • 索引名稱必須是小寫,不能用下劃線開頭,不包含逗號

(1.2) _type元數據

  • 代表document屬於index的哪個類別
  • 一個索引通常會劃分為多個type,邏輯上對index有些許不同的幾類數據進行分類
  • type名稱可以是大寫或者小寫,但是同時不能用下劃線開頭,不能包含逗號

(1.3) _id元數據

  • 代表document的唯一標識,與_index和_type一起可以起唯一標識和定位一個document
  • 我們可以手動指定document的id,也可以不指定,由es自動為我們創建一個id

--------------------------------------------------------------------

2、document id的手動指定和自動生成

(2.1)、手動指定document id

根據應用情況來說,是否滿足手動指定document id的前提:一般來說,是從某些其他系統中導入一些數據到es時會采取這種方式,就是系統中已有數據的唯一標識,作為es中的document的id

語法格式為:

put /index/type/id

{

"json"  

}

(2.2)、自動生成document id

語法格式:

post /index/type

{

"json"

}

自動生成的id,長度為20個字符,URL安全、base64編碼、GUID、分布式系統並行生成時不可能發生沖突。

--------------------------------------------------------------------

3、document的_source元數據以及定制返回結果

(3.1)、_source元數據

首先我們往es中添加一條數據:

1 PUT /test_index/test_type/1
2 {
3   "test_field1":"test field1",
4   "test_field2":"test field2"
5 }

查詢這條數據:

 1 GET /test_index/test_type/1
 2 返回結果:
 3 {
 4   "_index": "test_index",
 5   "_type": "test_type",
 6   "_id": "1",
 7   "_version": 1,
 8   "found": true,
 9   "_source": {
10     "test_field1": "test field1",
11     "test_field2": "test field2"
12   }
13 }

_source元數據,就是說,我們在創建一個document的時候,使用的那個放在request body中的json串,默認情況下,在get的時候會原封不動的給我們返回。

(3.2)、定制返回結果,指定_source中返回哪些field

 1 GET /test_index/test_type/1?_source=test_field2
 2 返回結果:
 3 {
 4   "_index": "test_index",
 5   "_type": "test_type",
 6   "_id": "1",
 7   "_version": 1,
 8   "found": true,
 9   "_source": {
10     "test_field2": "test field2"
11   }
12 }

Elasticsearch中document的基礎知識