作者:journeylis-1998_246 | 来源:互联网 | 2023-05-20 21:45
索引 文档偏向于开发人员的视角,是一个逻辑上面的概念,节点和分片呢偏向运维人员的视觉,偏向是物理的概念
文档(Document)
Elasticsearch 是面向文档的,文档是所有可搜索数据的最小单位
-
日志文件中的日志项
- —本电影的具体信息/一张唱片的详细信息。
- MP3 播放器里的一首歌 /一篇 PDF 文档中的具体内容
文档会被序列化成 JSON格式,保存在 Elastlesearch 中
- JSON 对象由字段组成
- 每个字段都有对应的字段类型(字符串/数值/布尔/日期/二进制/范围类型)
每个文档都有一个 Unique ID
- 你可以自己指定 ID
- 或者通过 Elasticsearch 自动生成
你可以理解文档为关系型数据库里面的一条记录
JSON 文档
一篇文档包含了一系列的字段。类似数据库表中一列
JSON 文档,格式灵活,不需要预先定义格式
- 字段的类型可以指定或者通过Elasticsearch 自动推算
- 支持数组/ 支持嵌套
从csv文件中读取到raw data是关于电影的,通过logstash进行转化之后进入es之后就是json的格式了。
Json的每个字段都有其数据类型,es可以根据其字段做一个数据类型的推算。
上面可以看到在es当中数据还是支持数组的,支持嵌套
文档的元数据
元数据,用于标注文档的相关信息
- _index-文档所属的索引名
- _type-文档所属的类型名
- _id - 文档唯一 ID
- _source∶ 文档的原始 JSON 数据
- _all 整合所有字段内容到该字段,已被废除
- _version∶ 文档的版本信息
- _score∶ 相关性打分
每篇文档都有其元数据,比如_index表示文档所属的索引名字
All字段在7.0已经被废除了,在早期版本
_version 代表文档在系统里面的版本,当有大量数据并发读写的时候,版本信息可以很好的帮你解决版本冲突的问题
在全文检索的时候,相关性非常重要,所以es根据结果的算分也就是_score在该文档查询当中的值
r
索引
Index-索引是文档的容器,是一类文档的结合
- Index 体现了逻辑空间的概念∶每个索引都有自己的 Mapping 定义,用于定义包含的文档的字段名和字段类型
- Shard 体现了物理空间的概念∶索引中的数据分散在 Shard上
索引的 Mapping 与 Settings
- Mapping 定义文档字段的类型
- Setting 定义不同的数据分布
简单做个理解就是索引当中的数据最后是被分配在shard分片上
在一个索引上面可以为其设置mapping和settings
Setting主要是可以去指定究竟要用多少分片,以及数据是如何分布的
索引的不同语意
- 名词∶一个Elasticsearch集群中,可以创建很多个不同的索引
- 动词∶ 保存一个文档到Elasticserch的过程也叫索引(indexing)ES 中,创建一个倒排索引的过程
- 名词∶一个B 树索引,一个倒排索引
倒排索引是搜索引擎当中一个非常重要的数据结构
抽象与类比
如果将关系型数据库和elastich做一个并不是非常恰当的类比,其实,当你谈到关系型数据库表的时候对应的就是es里面的索引。那么关系型数据库里面的每一条记录在es当中就是文档。关系型数据库里面的每个字段就是es当中文档的一个字段。Es当中的mapping就是关系型数据库当中schema中的表定义
Sql可以对关系型数据库进行查询的,在es当中也提供了DSL帮助你进行各种各样的查询
其实es和关系型数据库有各自的优缺点,当你要进行全文检索,对搜索结果进行算分的时候es会特别的合适。当你对数据事务性要求特别高的时候,那么需要将传统的关系型数据库和es结合使用
为了方便其他语言的整合,es提供了丰富的api来给其他程序进行调用,所以程序要和es进行集成的时候,只需要发出http的请求就会得到相应的结果