在 Elasticsearch 中,术语 文档 有着特定的含义。它是指最顶层或者根对象, 这个根对象被序列化成 JSON 并存储到 Elasticsearch 中,指定了唯一 ID。
1. 介绍
一个文档除了自身数据外,还包括元数据(有关文档的信息)
三个必须的元数据元素如下:
- _index 文档在哪存放
- _type 文档表示的对象类别
- _id 文档唯一标识
- 索引
索引名必须小写,不能以下划线开头,不能包含逗号
实际上,在 Elasticsearch 中,我们的数据是被存储和索引在分片中,而一个索引仅仅是逻辑上的命名空间, 这个命名空间由一个或者多个分片组合在一起。 然而,这是一个内部细节,我们的应用程序根本不应该关心分片,对于应用程序而言,只需知道文档位于一个 索引 内。 Elasticsearch 会处理所有的细节,当然这很有意思,有兴趣可以读下相关章节-集群原理。
- 类别
数据可能在索引中只是松散的组合在一起,但是通常明确定义一些数据中的子分区是很有用的,在索引中对数据进行逻辑分区,这将更加清晰。
一个 _type 命名可以是大写或者小写,但是不能以下划线或者句号开头,不应该包含逗号, 并且长度限制为256个字符.
- id
ID 是一个字符串, 当它和 _index 以及 _type 组合就可以唯一确定 Elasticsearch 中的一个文档。 当你创建一个新的文档,要么提供自己的 _id ,要么让 Elasticsearch 帮你生成。
- 其他一些元数据
2. 索引文档
索引文档 - 是文档存储起来并且可以被搜索
1.使用自定义的id
使用put方式,并自己提供id
类似于下面的格式
PUT /{index}/{type}/{id}
{
"field": "value",
...
}
请求
PUT /website/blog/123
{
"title": "My first blog entry",
"text": "Just trying this out...",
"date": "2014/01/01"
}
响应
{
"_index": "website",
"_type": "blog",
"_id": "123",
"_version": 1,
"created": true
}
在 Elasticsearch 中每个文档都有一个版本号。当每次对文档进行修改时(包括删除), _version 的值会递增。
- 自动生成id
使用post方式
POST /website/blog/
{
"title": "My second blog entry",
"text": "Still trying this out...",
"date": "2014/01/01"
}
{
"_index": "website",
"_type": "blog",
"_id": "AVFgSgVHUP18jI2wRx0w",
"_version": 1,
"created": true
}
自动生成的 ID 是 URL-safe、 基于 Base64 编码且长度为20个字符的 GUID 字符串。 这些 GUID 字符串由可修改的 FlakeID 模式生成,这种模式允许多个节点并行生成唯一 ID ,且互相之间的冲突概率几乎为零。