6 ElasticSearch 高级-应用篇

2022-01-17 14:56:53 浏览数 (1)

本片内容 简介 批量操作 导入数据 各种查询 索引别名、重建索引

所有内容 我们都先介绍 脚本操作、在介绍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的痛苦。 万物皆入轮回,谁也躲不掉! 以上文章,均是我实际操作,写出来的笔记资料,不会出现全文盗用别人文章!烦请各位,请勿直接盗用!

0 人点赞