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。