es版本7.6.2

1、新增一条数据

指定id
POST或PUT indexname/_doc/id
{
	"字段名":"字段值"
}

7.6.2逐渐弃用type概念,但使用下列方式不加_doc进行插入数据,会报错

POST或PUT indexname/id
{
 ……
}
es自动生成id
PUT index名字/_doc
{
	"字段名":"字段值"
}

自动生成的id,长度为20个字符,base64编码,GUID,分布式系统并行生成时不会发生冲突。
补充:上述两种方法也可以实现全量替换(全量update),当前id对应的doc已存在时。原来的Doc被标记为Deleted,新建一个Doc作为新数据。标记为Deleted的Doc在后台存储量大到一定限度时会进行物理删除。
当删除后马上重新又增加同样的一条数据时,version数字不是1,是删除那条+1,说明只是标记为deleted并没有立即物理删除。

es强制创建
PUT indexname/_doc/id/_create(待验证)

2、部分更新

POST indexname/_doc/id/_update
{
	"doc":{
		"字段名":"字段值"
	}
}
(上述方式7.6.2可以进行partial update,但会提示已弃用,建议使用下列方式)

POST indexname/_update/id
{
	"doc":{
		"字段名":"字段值"
	}
}

注:
全量更新和部分更新异同点:
同:
都存在 标记原始doc为Deleted,新建doc的过程
异:
部分更新所有操作都在一个shard内部完成,性能高于全量更新,且可避免并发冲突。

另:由于partial update内置乐观锁进行并发控制,可以使用下列进行partial update,再失败时进行多次尝试

POST indexname/_doc/id/_update?retry_on_conflict=5尝试5次
(待验证)

3、查询全部数据

POST indexname/_search
{
	"query": {
		"match_all": {}
	}
}

4、批量查询mget

// 一次获取 不同index下 不同id的数据
GET _mget
{
	"docs":[
		{
			"_index":"索引名",
			"_id":id1
		},
		{
			"_index":"索引名",
			"_id":id2
		}
	]
}

//一次获取同一index下不同id的数据
GET 索引名/_mget
{
	"docs":[
		{
			"_id":id1
		},
		{
			"_id":id2
		}
	]
}

// 一次获取同一个index下不同id的数据
GET 索引名/_mget
{
	"ids":[id1, id2]
}


// mget 可以指定index,指定id,以数组的方法一次性查询多条不相关的数据,减少网络开销。

5 、查询指定数据

POST index名/_search
{
	"query": {
		"match": {
			"字段名": "字段值"
		}
	}
}


POST index名/_search
{
	"query": {
		"term": {
			"字段名":"字段值"
		}
	}
}


POST index名/_search
{
	"query": {
		"terms": {
			"字段名": ["字段值1","字段值2"]
		}
	}
}
查询数据时,可以利用_source元数据自定义返回哪些字段。

6、查询并删除 单条记录

POST index名/_delete_by_query
{
	"query": {
		"match": {
			"字段名": "字段值"
		}
	}
}

7、查询并删除 所有记录

POST index名/_delete_by_query
{
	"query": {
		"match_all": {}
	}
}

8、批量处理

// delete,强制创建create,index(新增或全量更新),partial update
// 格式:每个操作两个json串,一个json串不能换行,不同json串之间必须有个换行。
// {"action":{"metadata"}}
// {"data"}
// 待验证