说说 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 逻辑设计的三大概念就是:文档、类型与索引。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值