6 ElasticSearch 高级-应用篇

本片内容 简介

批量操作

导入数据

各种查询

索引别名、重建索引

所有内容 我们都先介绍 脚本操作、在介绍Java API操作

批量操作

bulk 批量操作 :将文档 增删改查 一系列的操作,通过一次请求全部做完。优点:可以减少网络传输次数。

语法 与 案例

我们去实际操作一下吧。操作前 确保 索引库有 5 个文档

先查一下 有没有 5 个文档

GET persion2/_search

查询后 我们就开始 写我们的脚本了

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 说明 没有找到此文档

我们执行一下看看结果 代码有些长 有必要看一看

{
  "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 代码实现


    /**
     * 批量操作 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的痛苦。

万物皆入轮回,谁也躲不掉!

以上文章,均是我实际体验,写出来的笔记资料,不会出现全文盗用别人文章!烦请各位,支持下原创,请勿直接盗用,有条件的可以开通个会员支持下,谢谢!!!

Java Code Study » 6 ElasticSearch 高级-应用篇

招聘、单纯问问题,都可以联系我

加我QQ 公司缺人,拉我入伙