查看“ElasticSearch基础:存储结构”的源代码
←
ElasticSearch基础:存储结构
跳到导航
跳到搜索
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
[[category:ElasticSearch]] == 关于 == 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 就无法这样存储数据。 <syntaxhighlight lang="JSON" highlight=""> { "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号" } } </syntaxhighlight> 注意: * 文档中的任何 json 字段都可以作为查询条件。 * 文档的 json 格式没有严格限制,可以随意增加、减少字段,甚至每一个文档的格式都不一样也可以。 如:在同一个索引存中,存储格式完全不一样的文档数据 <syntaxhighlight lang="JSON" highlight=""> {"id":1, "username":"tizi365"} {"id":1, "title":"好看的包包", "price": 30} {"domain":"www.tizi365.com", "https": true} </syntaxhighlight> === '''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 预先定义号对应的字段类型了。 == 存储结构类比 == {| class="wikitable" ! Elasticsearch !! MYSQL |- | Index(索引) || 表 |- | Document(文档) || 行,一行数据 |- | Field(文档字段) || 表字段 |- | Mapping(映射) || 表结构定义 |}
返回至“
ElasticSearch基础:存储结构
”。
导航菜单
个人工具
登录
命名空间
页面
讨论
大陆简体
已展开
已折叠
查看
阅读
查看源代码
查看历史
更多
已展开
已折叠
搜索
导航
首页
最近更改
随机页面
MediaWiki帮助
笔记
服务器
数据库
后端
前端
工具
《To do list》
日常
阅读
电影
摄影
其他
Software
Windows
WIKIOE
所有分类
所有页面
侧边栏
站点日志
工具
链入页面
相关更改
特殊页面
页面信息