索引和映射
在 Elasticsearch(简称 ES)中,索引(Index) 和 映射(Mapping) 是两个重要概念,它们决定了数据的组织方式和搜索性能。
1. 索引(Index)
Section titled “1. 索引(Index)”在 Elasticsearch 中,索引 类似于关系型数据库中的 数据库(Database) 或 表(Table),用于存储和管理一组结构相似的文档。
- 一个索引包含多个文档,每个文档都有唯一的ID。
- 每个索引都有自己的倒排索引结构,允许 Elasticsearch 进行高效搜索。
- Elasticsearch 不是把所有数据存到一个地方,而是把数据拆分成多个小块(分片,Shard),然后分布存储在不同的服务器上。这样既能提高存储容量,也能提高查询速度,并支持分布式扩展。
2. 映射(Mapping)
Section titled “2. 映射(Mapping)”映射(Mapping) 定义了索引中 字段(Field) 的类型和属性,相当于数据库中的表结构。
- Elasticsearch 是 无模式(Schema-Free) 的,可以自动推断数据类型,但也可以手动定义数据结构。
- 通过 Mapping,可以控制字段类型、索引方式、分词规则等。
手动创建Mapping:
PUT blog{ "mappings": { "properties": { "title": { "type": "text", "analyzer": "ik_max_word" // 中文分词 }, "content": { "type": "text", "analyzer": "ik_smart" }, "publish_date": { "type": "date" }, "views": { "type": "integer" } } }}title和content:定义为text类型,使用中文分词器ik_max_word和ik_smart。publish_date:定义为date类型,存储发布时间。views:定义为integer类型,存储浏览量。
3. MySQL与Elasticsearch
Section titled “3. MySQL与Elasticsearch”| MySQL | Elasticsearch | 说明 |
|---|---|---|
| Table | Index | 索引(index),就是文档的集合,类似数据库的表(table)。 |
| Row | Document | 文档(Document),就是一条条的数据,类似数据库中的行(Row),文档都是JSON格式。 |
| Column | Field | 字段(Field),就是JSON文档中的字段,类似数据库中的列(Column)。 |
| Schema | Mapping | Mapping(映射)是索引中文档的约束,例如字段类型约束。类似数据库的表结构(Schema)。 |
| SQL | DSL | DSL是elasticsearch提供的JSON风格的请求语句,用来操作elasticsearch,实现CRUD。 |