登录/注册
Web前端之巅
2185
占位
2
占位
0
浏览量
占位
粉丝
占位
关注
ElasticSearch 文档及操作
Web前端之巅
2021-05-08 13:04:14 2021-05-08
111
0

公号:码农充电站pro 主页:https://codeshellme.github.io

本节介绍 ES 文档,索引及其基本操作。

1,ES 中的文档

在 ES 中,文档(Document)是可搜索数据的最小存储单位,相当于关系数据库中的一条记录。

文档以 Json 数据格式保存在 ES 中,Json 中保存着多个键值对,它可以保存不同类型的数据,比如:

  • 字符串类型
  • 数字类型
  • 布尔类型
  • 数组类型
  • 日期类型
  • 二进制类型
  • 范围类型

    Python 语言中的字典类型,就是 Json 数据格式。

文档中的数据类型可以指定,也可以由 ES 自动推断。

每个文档中都有一个 Unique ID,用于唯一标识一个文档。Unique ID 可以由用户指定,也可以由 ES 自动生成。

Unique ID 实际上是一个字符串。

比如下面的 Json 就是一个文档:

{
"name" : "XiaoMing",
"age" : 19,
"gender" : "male"
}

1.1,文档元数据

将上面那个 Json 数据存储到 ES 后,会像下面这样:

{
"_index": "person",
"_type": "_doc",
"_id": "2344563",
"_version": 1,
"_source": {
"name": "XiaoMing",
"age": 19,
"gender": "male"
}
}

其中以下划线开头的字段就是元数据:

  • _index:文档所属的索引。
  • _type:文档的类型。ES 7.0 开始,一个索引只能有一种 _type。
  • _id:文档的唯一 ID。
  • _source:文档的原始 Json 数据。
  • _version:文档更新的次数。

你可以查看这里,了解“为什么单个Index下,不再支持多个Tyeps?”。

更多关于元数据的信息,可以参考这里

1.2,文档的删除与更新

ES 中文档的删除操作不会马上将其删除,而是会将其标记到 del 文件中,在后期合适的时候(比如 Merge 阶段)会真正的删除。

ES 中的文档是不可变更的更新操作会将旧的文档标记为删除,同时增加一个新的字段,并且文档的 version 加 1。

1.3,文档中的字段数

在 ES 中,一个文档默认最多可以有 1000 个字段,可以通过 index.mapping.total_fields.limit 进行设置。

注意在设计 ES 中的数据结构时,不要使文档的字段数过多,这样会使得 mapping 很大,增加集群的负担。

2,ES 中的索引

ES 中的文档都会存储在某个索引(Index)中,索引是文档的容器,是一类文档的集合,相当于关系型数据库中的表的概念。

ES 中可以创建很多不同的索引,表示不同的文档集合。

每个索引都可以定义自己的 MappingsSettings

  • Mappings:用于设置文档字段的类型。
  • Settings:用于设置不同的数据分布。

对于索引的一些参数设置,有些参数可以动态修改,有些参数在索引创建后不能修改,可参考这里

ES 与传统数据库类比

如果将 ES 中的基本概念类比到传统数据库中,它们的对应关系如下:

ES 传统数据库
索引
文档
字段
Mapping 表定义
DSL SQL 语句

索引相关 API

下面给出一些查看索引相关信息的 API:

# 查看索引相关信息
GET index_name
# 查看索引的文档总数
GET index_name/_count
# 查看指定索引的前10条文档
POST index_name/_search
{
}
#_cat indices API
# 查看所有的索引名以 index_prefix 为前缀的索引
GET /_cat/indices/index_prefix*?v&s=index
# 查看状态为 green 的索引
GET /_cat/indices?v&health=green
# 按照文档个数排序
GET /_cat/indices?v&s=docs.count:desc
# 查看指定索引的指定信息
GET /_cat/indices/index_prefix*?pri&v&h=health,index,pri,rep,docs.count,mt
# 查看索引使用的内存大小
GET /_cat/indices?v&h=i,tm&s=tm:desc

3,GET 操作

GET 操作可以获取指定文档的内容。

GET index_name/_count:获取指定索引中的文档数。

GET index_name/_doc/id:获取指定索引中的指定文档。

GET index_name/_doc:不允许该操作。

GET index_name:获取指定索引的 Mappings 和 Settings。

4,POST / PUT 操作

POST/PUT 操作用于创建文档。

按照 POST / PUT 方法来区分

暂无评论