es中的索引對應mysql的數據庫、類型對應mysql的表、文檔對應mysql的記錄、映射對應mysql的索引
索引:index
類型:type
映射:mappings
python
一、建立索引
在kibana的Dev Tools中輸入以下mysql
PUT
/
lib
/
{
"settings"
:{
"index"
:{
"number_of_shards"
:
3
,
"number_of_replicas"
:
0
}
}
}
|
索引的名稱爲lib
number_of_shards:分片的數量爲3,分片的數量一旦肯定了就不能修改
number_of_replicas: 備份的數量爲1,因爲就1臺服務器所以備份數量爲0sql
建立成果後在右邊顯示以下數據庫
{
"acknowledged"
: true,
"shards_acknowledged"
: true,
"index"
:
"lib"
}
|
直接建立一個索引,會使用默認配置
PUT lib2服務器
查看已經建立好的索引的配置
GET /lib/_settings
GET /lib2/_settingsapp
查看全部索引的配置
GET _all/_settingspost
二、在索引下添加文檔
# user 是類型
# 1 是文檔的idui
PUT
/
lib
/
user
/
1
{
"first_name"
:
"Jane"
,
"last_name"
:
"Smith"
,
"age"
:
32
,
"about"
:
"I like to collect rock albums"
,
"interests"
: [
"music"
]
}
|
右邊顯示結果以下spa
{
"_index"
:
"lib"
,
"_type"
:
"user"
,
"_id"
:
"1"
,
"_version"
:
1
,
"result"
:
"created"
,
"_shards"
: {
"total"
:
1
,
"successful"
:
1
,
"failed"
:
0
},
"_seq_no"
:
0
,
"_primary_term"
:
1
}
|
若是添加文檔時沒有指定id,那麼這個id會由es自動生成,那麼咱們要使用POST方式添加文檔rest
POST
/
lib
/
user
/
{
"first_name"
:
"Douglas"
,
"last_name"
:
"Fir"
,
"age"
:
23
,
"about"
:
"I like to build cabinets"
,
"interests"
: [
"forestry"
]
}
|
結果以下
{
"_index"
:
"lib"
,
"_type"
:
"user"
,
"_id"
:
"3z0vM2kBpR5Gle8qjwsu"
,
"_version"
:
1
,
"result"
:
"created"
,
"_shards"
: {
"total"
:
1
,
"successful"
:
1
,
"failed"
:
0
},
"_seq_no"
:
0
,
"_primary_term"
:
1
}
|
三、查詢文檔
# 根據文檔id進行查詢
GET /lib/user/1
結果以下
{
"_index"
:
"lib"
,
"_type"
:
"user"
,
"_id"
:
"1"
,
"_version"
:
1
,
"found"
: true,
"_source"
: {
"first_name"
:
"Jane"
,
"last_name"
:
"Smith"
,
"age"
:
32
,
"about"
:
"I like to collect rock albums"
,
"interests"
: [
"music"
]
}
}
|
GET /lib/user/3z0vM2kBpR5Gle8qjwsu
# 查看文檔的部分信息
GET /lib/user/1?_source=age,about
結果以下
{
"_index"
:
"lib"
,
"_type"
:
"user"
,
"_id"
:
"1"
,
"_version"
:
1
,
"found"
: true,
"_source"
: {
"about"
:
"I like to collect rock albums"
,
"age"
:
32
}
}
|
四、修改文檔
# 使用一個新的文檔覆蓋以前的文檔,會覆蓋文檔全部字段的值
PUT
/
lib
/
user
/
1
{
"first_name"
:
"Jane"
,
"last_name"
:
"Smith"
,
"age"
:
36
,
"about"
:
"I like to collect rock albums"
,
"interests"
: [
"music"
]
}
|
結果以下,會提示結果爲updated
{
"_index"
:
"lib"
,
"_type"
:
"user"
,
"_id"
:
"1"
,
"_version"
:
2
,
"result"
:
"updated"
,
"_shards"
: {
"total"
:
1
,
"successful"
:
1
,
"failed"
:
0
},
"_seq_no"
:
1
,
"_primary_term"
:
1
}
|
# 修改文檔中的指定字段的值
POST
/
lib
/
user
/
1
/
_update
{
"doc"
:{
"age"
:
33
}
}
|
結果以下
{
"_index"
:
"lib"
,
"_type"
:
"user"
,
"_id"
:
"1"
,
"_version"
:
3
,
"result"
:
"updated"
,
"_shards"
: {
"total"
:
1
,
"successful"
:
1
,
"failed"
:
0
},
"_seq_no"
:
2
,
"_primary_term"
:
1
}
|
五、刪除文檔
DELETE /lib/user/1
結果以下
{
"_index"
:
"lib"
,
"_type"
:
"user"
,
"_id"
:
"1"
,
"_version"
:
4
,
"result"
:
"deleted"
,
"_shards"
: {
"total"
:
1
,
"successful"
:
1
,
"failed"
:
0
},
"_seq_no"
:
3
,
"_primary_term"
:
1
}
|
六、刪除一個索引
DELETE lib2
結果以下
{
「acknowledged」: true
}
七、put和post比較
PUT是冪等方法,而POST並非。
PUT用於更新操做,POST用於新增操做比較合適。
PUT,DELETE操做是冪等的,所謂冪等就是指無論進行多少次操做,結果都同樣。好比,我用PUT修改一篇文章,而後在作一樣的操做,每次操做後的結果並無不一樣,DELETE也是同樣。
POST操做不是冪等,好比常見的POST重複加載問題:當咱們屢次發出一樣的POST請求後,其結果是建立出了若干的資源。
還有一點須要注意的是,建立操做能夠使用POST,也能夠使用PUT。區別在於POST是做用在一個集合資源之上的(/articles),而PUT操做是做用在一個具體資源之上的(/articles/123),好比說不少資源使用數據庫自增主鍵做爲標識信息,而建立的資源的標識信息究竟是什麼只能由服務端提供,這個時候就必須使用POST。