“ElasticSearch基础:存储结构”的版本间差异
		
		
		
		
		
		跳到导航
		跳到搜索
		
				
		
		
	
 (建立内容为“category:ElasticSearch  == 关于 == MySQL 的数据模型由数据库、表、字段、字段类型组成,自然 ES 也有自己的一套存储结构,下…”的新页面)  | 
				小无编辑摘要  | 
				||
| (未显示同一用户的2个中间版本) | |||
| 第1行: | 第1行: | ||
[[category:  | [[category:ElasticSearch教程]]  | ||
== 关于 ==  | == 关于 ==  | ||
| 第5行: | 第5行: | ||
== 基本概念 ==  | == 基本概念 ==  | ||
===   | === '''Index'''(索引)===  | ||
在 Elasticsearch 中索引(Index)'''代表文档数据的集合''',类似 MySQL 的表。  | 在 Elasticsearch 中索引(Index)'''代表文档数据的集合''',类似 MySQL 的表。  | ||
* (文档指的是 ES 中存储的一条数据)  | * (文档指的是 ES 中存储的一条数据)  | ||
| 第16行: | 第16行: | ||
* 在 Elasticsearch7.0 以后的版本,已经废弃文档类型。  | * 在 Elasticsearch7.0 以后的版本,已经废弃文档类型。  | ||
===   | === '''Document'''(文档)===  | ||
Elasticsearch 是'''面向文档'''的数据库,文档是最基本的存储单元,文档类似 MySQL 表中的一行数据。  | Elasticsearch 是'''面向文档'''的数据库,文档是最基本的存储单元,文档类似 MySQL 表中的一行数据。  | ||
* 简单的说在 ES 中,文档指的就是一条 '''JSON''' 数据。  | * 简单的说在 ES 中,文档指的就是一条 '''JSON''' 数据。  | ||
| 第51行: | 第51行: | ||
</syntaxhighlight>  | </syntaxhighlight>  | ||
===   | === '''Field'''(文档字段)===  | ||
Field(文档字段)即 '''json 字段'''。文档由多个 json 字段(Field)组成, 这里的字段类似 MySQL 中表的字段。  | Field(文档字段)即 '''json 字段'''。文档由多个 json 字段(Field)组成, 这里的字段类似 MySQL 中表的字段。  | ||
| 第66行: | 第66行: | ||
* Elasticsearch 支持'''动态映射''',我们可以不必预先定义文档的 json 结构和对应的字段类型,Elasticsearch 会'''自动推断字段的类型'''。  | * Elasticsearch 支持'''动态映射''',我们可以不必预先定义文档的 json 结构和对应的字段类型,Elasticsearch 会'''自动推断字段的类型'''。  | ||
===   | === '''Mapping'''(映射)===  | ||
Elasticsearch 的 mapping(映射):每个索引都有一个映射规则,我们可以通过定义'''索引的映射规则''',提前'''定义好文档的 json 结构和字段类型'''。  | Elasticsearch 的 mapping(映射):每个索引都有一个映射规则,我们可以通过定义'''索引的映射规则''',提前'''定义好文档的 json 结构和字段类型'''。  | ||
* 如果没有定义索引的映射规则,Elasticsearch 会在写入数据的时候,根据我们写入的数据字段推测出对应的字段类型,相当于自动定义索引的映射规则。  | * 如果没有定义索引的映射规则,Elasticsearch 会在写入数据的时候,根据我们写入的数据字段推测出对应的字段类型,相当于自动定义索引的映射规则。  | ||
| 第88行: | 第88行: | ||
| Mapping(映射) || 表结构定义  | | Mapping(映射) || 表结构定义  | ||
|}  | |}  | ||
2023年3月31日 (五) 21:51的最新版本
关于
MySQL 的数据模型由数据库、表、字段、字段类型组成,自然 ES 也有自己的一套存储结构,下面先介绍ES存储相关的概念,然后跟MYSQL做一下对比方便大家理解。
基本概念
Index(索引)
在 Elasticsearch 中索引(Index)代表文档数据的集合,类似 MySQL 的表。
- (文档指的是 ES 中存储的一条数据)
 
Type(文档类型)
在 Elasticsearch 老的版本中:文档类型,代表一类文档的集合。【即,Index(索引)类似 MySQL 的数据库、文档类型类似 MySQL 的表】
在新版的 Elasticsearch 中,已经不使用文档类型了,ES 没有数据库的概念,而 Index(索引)类似 MySQL 表的概念。
- 在 Elasticsearch7.0 以后的版本,已经废弃文档类型。
 
Document(文档)
Elasticsearch 是面向文档的数据库,文档是最基本的存储单元,文档类似 MySQL 表中的一行数据。
- 简单的说在 ES 中,文档指的就是一条 JSON 数据。
 
Elasticsearch中文档使用json格式存储,因此存储上比Mysql要灵活的多,Elasticsearch支持任意格式的json数据。
例如:一个订单数据,我们可以将复杂的 Json 结构保存到 Elasticsearch 中, MySQL 就无法这样存储数据。
{
	"id": 12,
	"status": 1,
	"total_price": 100,
	"create_time": "2019-12-12 12:20:22",
	"user" : { // 嵌套json对象
		"id" : 11,
		"username": "tizi365",
		"phone": "13500001111",
		"address" : "上海长宁区001号"
	}
}
注意:
- 文档中的任何 json 字段都可以作为查询条件。
 - 文档的 json 格式没有严格限制,可以随意增加、减少字段,甚至每一个文档的格式都不一样也可以。
 
如:在同一个索引存中,存储格式完全不一样的文档数据
{"id":1, "username":"tizi365"}
{"id":1, "title":"好看的包包", "price": 30}
{"domain":"www.tizi365.com", "https": true}
Field(文档字段)
Field(文档字段)即 json 字段。文档由多个 json 字段(Field)组成, 这里的字段类似 MySQL 中表的字段。
当然Elasticsearch中字段也有类型的,下面是常用的字段类型:
- 数值类型(包括: long、integer、short、byte、double、float)
 - text:支持全文搜索
 - keyword:不支持全文搜索
- 例如:email、电话这些数据,作为一个整体进行匹配就可以,不需要分词处理。
 
 - date:日期类型
 - boolean
 
- Elasticsearch 支持动态映射,我们可以不必预先定义文档的 json 结构和对应的字段类型,Elasticsearch 会自动推断字段的类型。
 
Mapping(映射)
Elasticsearch 的 mapping(映射):每个索引都有一个映射规则,我们可以通过定义索引的映射规则,提前定义好文档的 json 结构和字段类型。
- 如果没有定义索引的映射规则,Elasticsearch 会在写入数据的时候,根据我们写入的数据字段推测出对应的字段类型,相当于自动定义索引的映射规则。
 - 类似 MySQL 中的表结构定义。
 
- 虽然 Elasticsearch 的自动映射功能很方便,但是实际业务中,对于关键的字段类型,通常预先定义好,避免 Elasticsearch 自动生成的字段类型不是你想要的类型。
- 例如: ES 默认将字符串类型数据自动定义为 text 类型,但是关于手机号,我们希望是 keyword 类型,这个时候就需要通过 mapping 预先定义号对应的字段类型了。
 
 
存储结构类比
| Elasticsearch | MYSQL | 
|---|---|
| Index(索引) | 表 | 
| Document(文档) | 行,一行数据 | 
| Field(文档字段) | 表字段 | 
| Mapping(映射) | 表结构定义 |