美文网首页
ElasticSearch 使用详解:基于 Rest API 的

ElasticSearch 使用详解:基于 Rest API 的

作者: you的日常 | 来源:发表于2021-12-22 12:14 被阅读0次

    前面的章节主要介绍 ES 的基本概念,以及如何使用 ES+Kibana 进行业务数据的分析挖掘。本章节将涉及到如何使用 ES 对数据进行增删改查,传统数据库第一步就是创建数据库,然后创建表,再基于表对数据进行增删改查,ES 也是如此。前面也对传统数据库与 ES 做了简单的对比,数据库 == ES 实例,数据库表 == ES 索引,数据库 schema==mapping。

    7.0 之前的 ES 是这么一种格式,索引/类型,如果把索引看做是数据库,那么类型就是数据库表,你可以这么定义 class/student/1,表示班级索引、学生类型、学号为 1。现在 7.0 之后类型统一为 _doc

    image

    Index 操作

    我们现在创建一个班级索引,并插入一条学生的数据。值得注意的是我框选出来的,首先是 type 我改成 _doc,否则将无法创建索引。其次是 id 号为 1,版本号 _version 也是 1,result 是 created。如果我再执行一次这个命令:

    image-

    是的,版本号加 1,另外显示 result 为 updated。也就是说,在使用 PUT 作为创建索引添加数据的时候,会检查是否存在相同的文档,如果存在则删除,并且创建新的文档,另外版本号加一。

    image-

    我想要像传统数据库那样,指定 id 为主键后,再插入数据如果有相同的 id 则无法插入,明显 index 操作无法满足这种需求。

    Create 操作

    PUT 提供了另外一个 REST API 来解决这个问题——create。直接执行将会报错,像下图那样。如果想要创建唯一个文档,可以考虑使用 create 命令。

    PUT class/_create/1
    {
      "name":"xiaoming",
      "sex":"man",
      "age":16
    }
    
    
    image-

    在传统数据库中,可以设置自增的 id,在 ES 中虽然不能够设置自增 id,但是可以设置自动生成 id,只需要使用 POST 接口。虽然没有指定 id,但是系统自动生成了唯一的 id。像 ES 中存数据,要有个顺序,首先是指定索引,索引指定后指定 Type,然后才是 id,id 不指定也行,但是要使用 POST 接口(Index->Type->id)。

    POST class/_doc
    {
      "name":"xiaohong",
      "sex":"female",
      "age":16
    }
    
    
    image

    当我们创建好一个文档后,返回的数据如下,从返回的数据可以了解到,索引 _index 是 class,类型 _type 是 _doc,_id 是 DqksZm8BOMhQf7h0chZh。另外,可以看到分片信息,一共有两个主分片。

    {
      "_index" : "class",
      "_type" : "_doc",
      "_id" : "DqksZm8BOMhQf7h0chZh",
      "_version" : 1,
      "result" : "created",
      "_shards" : {
        "total" : 2,
        "successful" : 2,
        "failed" : 0
      },
      "_seq_no" : 3,
      "_primary_term" : 3
    }
    
    

    我们在创建 calss 的时候,虽然没有配置分片信息,但是已经系统给定默认的配置,我们也可以自定义配置方法。我配置了 2 个主分片,并为每个分片配置一个副本。

    PUT /class1
    {
      "settings": {
        "number_of_replicas": 1,
        "number_of_shards": 2
      }
    }
    
    
    image-

    我在索引 class1 中创建一个文档,可以看到分片信息。

    image

    相关文章

      网友评论

          本文标题:ElasticSearch 使用详解:基于 Rest API 的

          本文链接:https://www.haomeiwen.com/subject/snzebktx.html