本片内容 简介 批量操作 导入数据 各种查询 索引别名、重建索引
所有内容 我们都先介绍 脚本操作、在介绍Java API操作
批量操作
bulk 批量操作 :将文档 增删改查 一系列的操作,通过一次请求全部做完。优点:可以减少网络传输次数。
语法 与 案例
我们去实际操作一下吧。操作前 确保 索引库有 5 个文档
先查一下 有没有 5 个文档
代码语言:javascript复制GET persion2/_search
查询后 我们就开始 写我们的脚本了
代码语言:javascript复制POST _bulk
{"delete":{"_index":"persion2","_id":"5"}}
{"create":{"_index":"persion2","_id":"8"}}
{"name":"BULK插入","age":"88"}
{"update":{"_index":"persion2","_id":"2"}}
{"doc":{"name":"二号名字被修改了"}}
上面的含义是 :
- 删除 索引库 persion2中 id 为 5 的文档
- 在索引库persion2中 创建一个 id 为8 的文档 数据又 name=”BULB插入”,age=”88″
- 更新索引库persion2 中 id 为2 的文档,修改其中name 为 “二号名字被修改”
注意 上面的 update 就是更新 ,没有此 id 就会提示 document_missing_exception 说明 没有找到此文档
我们执行一下看看结果 代码有些长 有必要看一看
代码语言:javascript复制{
"took" : 12, // 这里执行需要的毫秒数
"errors" : false, // 是否出现错误
"items" : [
{
"delete" : {
"_index" : "persion2",
"_type" : "_doc",
"_id" : "5",
"_version" : 1,
"result" : "not_found",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 89,
"_primary_term" : 4,
"status" : 404
}
},
{
"create" : {
"_index" : "persion2",
"_type" : "_doc",
"_id" : "8",
"_version" : 2,
"result" : "created",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 90,
"_primary_term" : 4,
"status" : 201
}
},
{
"update" : {
"_index" : "persion2",
"_type" : "_doc",
"_id" : "2",
"_version" : 2,
"result" : "updated",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 91,
"_primary_term" : 4,
"status" : 200
}
}
]
}
上面显示 errors 为 false 就是 执行成功了
最终的Java 代码实现
代码语言:javascript复制 /**
* 批量操作 bulk
* @throws IOException
*/
@Test
void bulk() throws IOException {
// 创建 BulkRequest 对象,用于 整合所有的操作
BulkRequest bulkRequest = new BulkRequest();
// 添加 删除文档 相关操作
DeleteRequest deleteRequest = new DeleteRequest("persion2","5");
bulkRequest.add(deleteRequest);
// 添加 添加文档
Map map = new HashMap();
map.put("name","BULK插入");
map.put("age","88");
IndexRequest indexRequest = new IndexRequest("persion2").id("8").source(map);
// 更新文档
UpdateRequest updateRequest = new UpdateRequest();
Map map1 = new HashMap();
map1.put("name","二号名字被修改了");
updateRequest.index("persion2").id("2").doc(map1);
bulkRequest.add(updateRequest);
// 执行 批量操作
BulkResponse bulk = client.bulk(bulkRequest, RequestOptions.DEFAULT);
RestStatus status = bulk.status();
System.out.println(status);
}
导入数据 Very Important
模拟一个需求:
将数据库中 Goods表 的数据 导入 ElasticSearch 中
实现步骤:
- 创建goods索引
- 查询Goods表数据
- 批量添加到ElasticSearch中
特殊说明: 解决问题的光鲜,藏着磕Bug的痛苦。 万物皆入轮回,谁也躲不掉! 以上文章,均是我实际操作,写出来的笔记资料,不会出现全文盗用别人文章!烦请各位,请勿直接盗用!