//通过_doc创建一个文档 通过_id传递id参数,不传id会默认生产,如果文档已存在,会先进行删除在创建,版本会增加。
PUT /<target>/_doc/<_id>
POST /<target>/_doc/
//通过_create创建一个文档,_id参数必传。如果文档已存在会报错
PUT /<target>/_create/<_id>
POST /<target>/_create/<_id>
示例:
//创建id为1 的文档
POST layne-index-002/_doc/1
{
"name":"layne",
"age":"27"
}
//创建id为3的文档
PUT layne-index-002/_create/3
{
"name":"layne",
"age":"27"
}
我们可以通过_doc和_create两种API方式来创建文档,主要区别在于_doc可以不需要强制指定_id参数,_create必须指定_id参数;_doc在创建文档的时候,如果文档已存在,会先进行删除再创建。而_create则会直接报错,提示创建失败。
//通过id获取文档信息
GET <index>/_doc/<_id>
//通过id检测文档是否存在
HEAD <index>/_doc/<_id>
//通过id获取原数据信息
GET <index>/_source/<_id>
//通过id检测原数据信息是否存在
HEAD <index>/_source/<_id>
//根据id删除文档信息
DELETE /<index>/_doc/<_id>
//根据条件进行删除
POST /<index>/_delete_by_query
示例:
//删除id为2的文档
DELETE layne-index-002/_doc/2
//删除名称为layne的文档信息
POST layne-index-002/_delete_by_query
{
"query":{
"term":{
"name":"layne"
}
}
}
//通过id修改文档信息 id文档信息必须存在,否则会失败
POST /<index>/_update/<_id>
//根据条件修改文档信息
POST /<index>/_update_by_query
示例
//根据id为4修改文档信息,如果文档中字段存在就更新,不存在则新增,如果数据信息和存储的信息一致,返回结果result字段会是“noop”。
POST layne-index-002/_update/4
{
"doc": {
"name":"Nacy",
"age":"18",
"gender":"F"
}
}
//根据条件修改
POST layne-index-002/_update_by_query
{
"script": {
"source": "ctx._source['name'] = 'Layne'",
"lang": "painless"
}
, "query": {
"term": {
"name": "nacy"
}
}
}
//批量获取 通过docs指定index 和id
GET /_mget
//指定index批量获取
GET /<index>/_mget
示例:
//分别获取layne-index-001,layne-index-002索引id为1的文档信息
GET /_mget
{
"docs":[
{
"_index":"layne-index-001",
"_id":"1"
},
{
"_index":"layne-index-002",
"_id":"1"
}
]
}
//分别获取layne-index-001,layne-index-002索引id为1的文档信息
GET /layne-index-002/_mget
{
"docs":[
{
"_index":"layne-index-001",
"_id":"1"
},
{
"_index":"layne-index-002",
"_id":"1"
}
]
}
//获取layne-index-002索引id为1和2的文档信息
GET /layne-index-002/_mget
{
"docs":[
{
"_id":"1"
},
{
"_id":"2"
}
]
}
//获取layne-index-002索引id为1和2的文档信息
GET /layne-index-002/_mget
{
"ids":["1","2"]
}
ES提供了一种批量操作方式,在一次请求中去执行多个操作操作,如index,create,delete,update。通过在请求体中定义一个JSON,通过换行来进行分隔。
action_and_meta_data\n
optional_source\n
action_and_meta_data\n
optional_source\n
....
action_and_meta_data\n
optional_source\n
POST /_bulk
POST /<target>/_bulk
示例:
//批量操作
POST _bulk
{
"index":{
"_index":"layne-index-003","_id":"1"}}
{
"name":"Layne","age":27,"gender":"M"} //执行index create 直接通过json数据体传参
{
"delete":{
"_index":"layne-index-003","_id":"2"}}
{
"create":{
"_index":"layne-index-003","_id":3}}
{
"name":"Nancy","age":28,"gender":"F"}
{
"update":{
"_index":"layne-index-003","_id":1}}
{
"doc":{
"favorite":"ball"}} //执行update操作时 通过doc传参数
其实ES官网文档中,提供了很多API的样例,更多内容可以参考ES文档操作API。