说说 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 型的值,导致索引失败。所以,最佳实践是在索引数据之前,就定义好所需的映射。

扫描二维码关注公众号,回复: 9505796 查看本文章

3 索引

索引是类型的容器,每个类型包含了一系列的文档集合。索引还存储了一些设置项,比如 refresh_interval,表示新近加入索引的文档对于搜索可见的时间间隔,即刷新频率。默认每秒更新一次,这也被称为准实时。


Elasticsearch 逻辑设计的三大概念就是:文档、类型与索引。

发布了636 篇原创文章 · 获赞 719 · 访问量 93万+

猜你喜欢

转载自blog.csdn.net/deniro_li/article/details/104439086
今日推荐