Elasticsearch系统学习(九)-批量操作
一、批量查询
1.1、批量查询的好处
单次查询:查询100条数据,那么就要发送100次网络请求,网络开销大
批量查询:查询100条数据,就只要发送1次网络请求,网络请求的性能开销缩减100倍
1.2、mget使用
1)一条一条的查询
GET /test_index/test_type/1 GET /test_index/test_type/2
2)mget批量查询
GET /_mget
{
"docs": [
{
"_index": "test_index",
"_type": "test_type",
"_id": 8
},
{
"_index": "test_index",
"_type": "test_type",
"_id": 10
}
]
}
{
"docs": [
{
"_index": "test_index",
"_type": "test_type",
"_id": "8",
"_version": 3,
"found": true,
"_source": {
"test_field": "test client 2"
}
},
{
"_index": "test_index",
"_type": "test_type",
"_id": "10",
"_version": 2,
"found": true,
"_source": {
"test_field1": "test1",
"test_field2": "updated test2"
}
}
]
}3)如果查询的document是一个index下的不同type
GET /test_index/_mget
{
"docs": [
{
"_type": "test_type",
"_id": 8
},
{
"_type": "test_type",
"_id": 10
}
]
}
4)如果查询的数据都在同一个index下的同一个type下
GET /test_index/test_type/_mget
{
"ids": [1, 2]
}二、bulk批量增删改
2.1、bulk语法
每一个操作要两个json串,语法如下:
{"action": {"metadata"}}
{"data"}比如创建一个文档:
{"index": {"_index": "test_index", "_type", "test_type", "_id": "1"}}
{"test_field1": "test1", "test_field2": "test2"}2.2、bulk支持的操作类型
(1)delete:删除一个文档,只要1个json串就可以了
(2)create:PUT /index/type/id/_create,强制创建
(3)index:普通的put操作,可以是创建文档,也可以是全量替换文档
(4)update:执行的partial update操作
注意:
1)bulk api对json的语法,有严格的要求,每个json串不能换行,只能放一行,同时一个json串和一个json串之间,必须有一个换行
2)bulk操作中,任意一个操作失败,是不会影响其他的操作的,但是在返回结果里,会告诉你异常日志
2.3、bulk操作
POST /_bulk
{ "delete": { "_index": "test_index", "_type": "test_type", "_id": "3" }}
{ "create": { "_index": "test_index", "_type": "test_type", "_id": "12" }} #当document存在时会报错
{ "test_field": "test12" }
{ "index": { "_index": "test_index", "_type": "test_type", "_id": "2" }}
{ "test_field": "replaced test2" }
{ "update": { "_index": "test_index", "_type": "test_type", "_id": "1", "_retry_on_conflict" : 3} }
{ "doc" : {"test_field2" : "bulk test1"} }
POST /test_index/_bulk
{ "delete": { "_type": "test_type", "_id": "3" }}
{ "create": { "_type": "test_type", "_id": "12" }}
{ "test_field": "test12" }
{ "index": { "_type": "test_type" }}
{ "test_field": "auto-generate id test" }
{ "index": { "_type": "test_type", "_id": "2" }}
{ "test_field": "replaced test2" }
{ "update": { "_type": "test_type", "_id": "1", "_retry_on_conflict" : 3} }
{ "doc" : {"test_field2" : "bulk test1"} }
POST /test_index/test_type/_bulk
{ "delete": { "_id": "3" }}
{ "create": { "_id": "12" }}
{ "test_field": "test12" }
{ "index": { }}
{ "test_field": "auto-generate id test" }
{ "index": { "_id": "2" }}
{ "test_field": "replaced test2" }
{ "update": { "_id": "1", "_retry_on_conflict" : 3} }
{ "doc" : {"test_field2" : "bulk test1"} }2.4、bulk size最佳大小
bulk request会加载到内存里,如果太大的话,性能反而会下降,因此需要反复尝试一个最佳的bulk size。一般从1000~5000条数据开始,尝试逐渐增加。另外,如果看大小的话,最好是在5~15MB之间。
作者:Lawrence
-------------------------------------------
个性签名:独学而无友,则孤陋而寡闻。做一个灵魂有趣的人!
扫描上面二维码关注我
如果你真心觉得文章写得不错,而且对你有所帮助,那就不妨帮忙“推荐"一下,您的“推荐”和”打赏“将是我最大的写作动力!
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接.

浙公网安备 33010602011771号