目录
一、增删改查
- 查询所有
GET _search{“query”:{“match_all”:{}}}
- 添加索引-自定义id
PUT /lib/
{
"settings": {
"index":{
"number_of_shards": 5,
"number_of_replicas": 1
}
}
}
- 添加索引-默认设置
PUT lib1
- 查看设置
GET /lib/_settings
GET /lib1/_settings
GET _all/_settings
- 添加文档-指定id
PUT /lib/user/1
{
"name":"Smith",
"age":6,
"about":"I'm a student",
"interests":["football","music"]
}
- 添加文档-默认id
POST /lib/user/
{
"name":"John",
"age":12,
"about":"I'm a teacher",
"interests":["study","piano"]
}
- 查:GET /index/type/id
GET /lib/user/1
- 查:返回指定字段:_source
GET /lib/user/1?_source=age,about
- 改:PUT /index/type/id
PUT /lib/user/1
{
"name":"Smith",
"age":16,
"about":"I'm a student",
"interests":["football","music"]
}
- 改:PUT /index/type/id/_update
POST /lib/user/1/_update
{
"doc": {
"age":18
}
}
- 删除文档
DELETE /lib/user/1
- 删除索引
DELETE lib1
- 批量获取:Multi Get
GET /_mget
{
"docs":[
{
"_index":"lib",
"_type":"user",
"_id":1
},
{
"_index":"lib",
"_type":"user",
"_id":2
}
]
}
- 批量查询,返回特定字段
GET /_mget
{
"docs":[
{
"_index":"lib",
"_type":"user",
"_id":1,
"_source":"name"
},
{
"_index":"lib",
"_type":"user",
"_id":2,
"_source":["name","age"]
}
]
}
- 简化写法
GET /lib/user/_mget
{
"docs":[
{
"_id":1
},
{
"_id":2
}
]
}
GET /lib/user/_mget
{
"ids":["1","2"]
}
- 批量操作:Bulk API
格式:{"action":{metadata}} \n {requestbody} \n-换行
action:[{"delete":"删除一个文档"},{"create":"文档不存在时创建"},
{"index":"创建新文档或替换已有文档"},{"update":"修改文档"}]
metadata:{"_index":"","_type":"","_id":""}
例:{"delete":{"_index":"lib","_type":"user","_id":"1"}}
POST /lib/user/_bulk
{"index":{"-id":"1"}}
{"name":"Jane","age":12,"about":"I'm a student","interests":["football","music"]}
{"index":{"-id":"1"}}
{"name":"Marry","age":16,"about":"I'm a dancer","interests":["dance","music"]}
#操作完成,返回:"errors":false---成功
注意:bulk会把将要处理的数据载入到内存中,所以数据量是有限制的,最佳的数据量不是一个确定的值。它取决于你的硬件、文档大小及复杂性、索引、搜索的负载。
一般建议是:1000-5000个文档,大小建议是5-15MB。
可以在es的配置文件中:elasticsearch-6.5.0/config/elasticsearch.yml中进行配置。
二、文档的版本控制
es采用了了乐观锁来保证数据的一致性,也就是说,当用户对文档进行操作时,并不需要对该文档做加锁和解锁的操作,只需要指定要操作的版本即可,当版本号一致时,es会允许操作顺利进行,反之会提示冲突并抛出异常-VersionConflictEngineException
版本号范围:1~2^63-1
内部版本控制:_version,检查_version与请求中指定的是否相同,如果不同则该请求不会顺利进行。_version=3,请求的也是3,成功执行。
外部版本控制:检查当前_version是否小于指定的数值,请求成功,那么外部的版本号就会被存储到文档的_version中。
version_type=external:保持_version与外部版本控制的数据一致。(如oracle用时间戳当做版本)。_version=3,请求的也是4,成功执行,并将_version的值改为请求中的version的值。
PUT /lib/user/4?version=5&version_type=external{
"name":"Marry",
"age":16,
"about":"I'm a dancer",
"interests":["dance","music"]
}
三、mapping