ElasticSearch 使用详解:基于 Rest API 的

2021-12-22  本文已影响0人  you的日常

前面的章节主要介绍 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
上一篇下一篇

猜你喜欢

热点阅读