欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

ES基本概念与API操作

程序员文章站 2022-09-28 13:42:01
本篇主要对 ES 中集群、节点、索引、文档的基本概念和增删改查的基本 API 做简要的总结梳理。 一. 基本概念 1. 文档(document) 文档是 ES 中记录数据的基本单位,...

本篇主要对 ES 中集群、节点、索引、文档的基本概念和增删改查的基本 API 做简要的总结梳理。


一. 基本概念

1. 文档(document)

文档是 ES 中记录数据的基本单位,是一系列数据字段的组合,本质上是一个 JSON 对象,类似于 MySQL 数据库中的一行数据,由各个不同数据类型的字段组成。包括常见的字符串类型、整型、日期等,也有一些 ElasticSearch 中特有的类型。

和 MySQL 的每行数据一样,每个文档有一个唯一的 ID 表示。

文档的数据可以分为两类 元数据(metaData) 和属性数据(properties)。前者记录文档的基本信息,比如其索引信息、ID 标识、原始文档。后者记录我们定义的各个字段数据。 后面在学习 ES 数据建模时会对其数据定义做深入的了解。

2. 索引(Index)

Index 类似于 MySQL 数据库的表,用来存储一系列具有相同数据结构的文档。在 MySQL 数据库中,每个表都有自己的 schema 表结构定义,Index 也一样,其使用 mapping 来定义其文档的存储结构。在后面的学习中会对 mapping 作详细的探讨。
一个集群是可以有多个索引的,比如 ES 记录 Nginx 日志时,可以每天生产一个索引。

3. 节点 (Node)

一个节点就是一个 ES 的运行实例,ES 是基于 Java 运行的,本质上就是一个 JVM 的运行程序。负责数据的存储、查询与分析。

4. 集群

多个节点构成一个 ElasticSearch 的 cluster 集群,集群统一对外服务,提高了可用性。

另外,在 ES6.0 之前还有 type 这一概念,每个 document 都是定义在某个 type 之下。但在 6.0 之后已经不再使用了,默认所有的 type 都为 doc 即可,不用做太多的关注

二. Index 与 Document 的基本 API

Elasticsearch 提供了一系列的 REST API来对 Index 和 Document 进行操作,主要有 GETPUTPOSTDELETE 四种方法

【1】Index 的 CRUD
创建索引
PUT /test_index

# 请求返回内容,表示创建成功
{
  "acknowledged": true,
  "shards_acknowledged": true,
  "index": "test_index"
}

需要注意,ES 中创建索引使用的是 PUT 请求,而不是我们常用的 POST, 使用 POST 请求的话会报错,信息如下,可以看出其支持的方法为 GET、PUT、DELETE 和 HEAD

{
  "error": "Incorrect HTTP method for uri [/test_index] and method [POST], allowed: [GET, PUT, DELETE, HEAD]",
  "status": 405
}
查询索引

# 查询 ES 实例中现有的所有索引
GET _cat/indices
# 查询新创建的索引
GET /test_index

# 查询 test_index 的基本信息
{
  "test_index": {
    "aliases": {},
    "mappings": {},
    "settings": {
      "index": {
        "creation_date": "1522159397979",
        "number_of_shards": "5",
        "number_of_replicas": "1",
        "uuid": "tcqyYJXlRQadel-sfqC6ng",
        "version": {
          "created": "6010299"
        },
        "provided_name": "test_index"
      }
    }
  }
}
删除索引
DELETE demo_index

{
  "acknowledged": true
}
【2】Index 的 CRUD
指定 ID 创建文档,使用 PUT

其中的 doc 就是之前提到过的 type,在 6.0 之后已经废弃了,全部写成 doc 即可

PUT /test_index/doc/1
{
  "username": "es",
  "age": 12
}
不指定 ID ,使用 POST

此时会随机生成一个 ID

POST /test_index/doc
{
  "username": "elk",
  "age": 12
}
查询 文档
# 指定 ID 查询
GET /test_index/doc/1
GET /test_index/doc/_search
删除文档
DELETE /test_index/doc/1
【3】 批量操作

ES 提供了批量操作的 _bulk 和 _mget API ,允许我们批量的对文档进行 CRUD 的操作,具体使用如下:

首先指明 action 动作和要操作的文档,如果是创建或者修改,后面在跟对应的字段数据。操作的 action 有四种

index: 创建文档,若存在,则报错 create: 创建文档,若存在,仍然创建,覆盖已有数据 delete: 删除文档 update: 更新文档
POST _bulk
# 创建
{"index":{"_index":"test_index","_type":"doc","_id":"3"}}
{"username":"alfred","age":20}
# 创建
{"create":{"_index":"test_index","_type":"doc","_id":"3"}}
{"username":"alfred","age":20}
# 删除
{"delete":{"_index":"test_index","_type":"doc","_id":"1"}}
# 更新
{"update":{"_id":"3","_index":"test_index","_type":"doc"}}
{"doc":{"age":"20"}}


# 批量查询
GET /_mget
{
  "docs": [
    {
      "_index": "test_index",
      "_type": "doc",
      "_id": 1
    },  
    {
      "_index": "test_index",
      "_type": "doc",
      "_id": 3
    }
  ]
}

以上就是 ES 中集群、节点、索引、文档的的概念和基本操作,知道了这些就可以上手使用 ES 了。但在此之前我们要知道,ES 作为一个开源的搜索引擎,其会对存入其中的数据进行分词,然后使用倒排索引的方式进行记录。因此搞清楚什么是倒排索引以及其 ES 的分词方式会使我们对 ES 的数据存储机制有一个更加直观的了解。下一篇笔记就将介绍 ES 的倒排索引和分词。