说说 Elasticsearch 的逻辑设计
作者:互联网
用于索引和搜索的基本单位是文档,为便于理解,可以将其认为是关系数据库表中的一行记录。不同的文档以不同的类型来区分,类型可以认为是关系数据库中的表。一个或多个类型存在于同一索引中,索引是更大的容器,可以认为是关系数据库中的某个库。
Elasticsearch 通过索引、类型、与 ID 唯一确定了某篇文档。注意: 这里的 ID 是字符串。
1 文档
Elasticsearch 是面向文档的,也就是说索引和搜索数据的最小单位是文档。
一篇文档通常是 JSON 表示的数据,比如一本书可以这样表示:
{
"title": "卢浮地宫",
"writer": "马克-安托万·马修"
}
文档包含的数据,可以是层次型的,比如一本书可能有多个名字,主标题、副标题以及原作名:
{
"writer": "马克-安托万·马修",
"title": {
"main": "卢浮地宫",
"sub": "一位专家的日志摘要",
"original": "Les Sous-sols du Révolu: Extraits du journal d'un expert"
}
}
文档包含的数据,也可以是一组数据,比如一本书会被标注为多个标签:
{
"writer": "马克-安托万·马修",
"title": {
"main": "卢浮地宫",
"sub": "位专家的日志摘要",
"original": "Les Sous-sols du Révolu: Extraits du journal d'un expert"
},
"tags": ["绘本", "漫画", "艺术"]
}
文档中的字段并不是固定的,我们可以随意添加或省略某些字段。但一定要定义好每个字段的类型,因为 Elasticsearch 会保存字段和类型之间的映射关系。
2 类型
类型是文档的逻辑容器,类似于数据库表是行记录的容器。因此,如果不同类型的文档,应该放入对应的类型中。例如,图书与读者不同,所以我们可以定义一个图书类型与一个读者类型加以区别。类型中字段的定义称为映射。例如, 图书类型中的 writer 字段可以映射为 string,存储作者信息。
Elasticsearch 能够自动检测出新的字段。比如一篇新近索引的文档定义了在目前映射中尚不存在的字段, Elasticsearch 会自动地将这个新字段加入映射,它会主动猜测这个新字段的类型,比如字段值为 1,那么 Elasticsearch 会认为它是长整型。但这个新字段可能在后一篇文档中,存入string 型的值,导致索引失败。所以,最佳实践是在索引数据之前,就定义好所需的映射。
3 索引
索引是类型的容器,每个类型包含了一系列的文档集合。索引还存储了一些设置项,比如 refresh_interval,表示新近加入索引的文档对于搜索可见的时间间隔,即刷新频率。默认每秒更新一次,这也被称为准实时。
Elasticsearch 逻辑设计的三大概念就是:文档、类型与索引。
deniro_li 发布了629 篇原创文章 · 获赞 712 · 访问量 92万+ 关注标签:映射,writer,索引,文档,类型,Elasticsearch,逻辑设计 来源: https://blog.csdn.net/deniro_li/article/details/104439086