ElasticSearch 基本概念

493 阅读3分钟

一文了解ElasticSearch主要的一些基本概念

文档 (Document)

  1. ElasticSearch是面向文档的,文档是所有可搜索的据的最小单位

    比如:

    • 日志文件中的日志项
    • 一首歌的具体信息
    • 一篇words具体内容
  2. 文档会被序列化成JSON格式,保存在ElasticSearch

    • JSON对象由字段组成
    • 每个字段都有对应的字段类型(字符串/数值/布尔/日期/二进制/范围)
  3. 每个文档都有一个Unique ID

    • 可以自己指定ID
    • 由ElasticSearch自动生成

JSON 文档

ElasticSearch中,一篇文档包含一系列的字段。相当于我们关系型数据库中的一条记录

为什么ElasticSearch会选用JSON文档呢? JSON文档相对来说格式较为灵活,不需要预定义格式。

字段可以自己指定或者通过ElasticSearch自动推算。
JSON支持的数据类型相对丰富,除了常规的类型还支持数组,还支持类型的嵌套。

文档的元数据

什么是元数据?
元数据是用于标注文档的相关信息。 ElasticSearch 中每一篇的文档都有一系列的元数据进行标注。

  • _id 文档的唯一ID
  • _index 文档所属的索引名
  • _type 文档所属的类型名
  • _source 文档的原始Json 数据
  • _all 7.0 开始已废除,整合了所有字段的内容字段
  • _version 文档的版本号,在大量并发下可以很好的解决文档冲突的问题
  • _score 文档与搜索相关性打分

索引

索引可以看成是文档的容器,一类文档的聚合体现。

  • Index体现了逻辑空间的概念,每个索引都有都有自己的Mapping定义,用来描述文档的字段名和字段类型
  • Shard 体现的是物理上空间概念,索引上的数据都是分散在shard 上的。

在一个索引上可以为其设置settingmapping

  • setting 用来定义索引是如何分布在shard上, 具体需要多少分片,数据是如何分布的
  • mapping 用来描述索引的字段类型与描述

索引的不同语义

索引在不同的上下文中是有不同的含义的。
在ES中指的是一类文档的集合,是名词属性。
在将文档写入ES中的时候,也可叫索引,指的是将文档对ES创建倒排索引的过程。 倒排索引在搜索引擎上是一个很重要的概念。日常生活中我们也会遇到索引,像字典目录查找。

TYPE

ElasticSearch 6.0 开始Type已经被 Deprecated
ElasticSearch 7.0 开始,一个索引只能创建一个Type _doc

ElasticSearch与关系型数据库的对比

RDBMS Elastic Search
Table Index(Type)
Row Document
Column Field
Schema Mapping
SQL DSL

从上面的表格我们可以看出

  1. ES中的Index 相当于关系型数据库中的
  2. ES中的Ducument 可以看成是关系型数据库的记录
  3. ES中的Column 可以看成是关系型数据库的的字段
  4. ES中的Mapping可以看作关系型数据库的表定义
  5. 对于关系型数据库我们使用SQL进行查询,ES中使用DSL来进行查询

二者除了上述的类比外还有更重要的差别

  1. 在对数据需要全文检索,对结果进行相关性算分的时候,ES相对更有优势
  2. 在当对数据需要事务管理要求比较高的时候,显然传统的RDBMS更有适合

REST API

为了方便与其他语言的系统进行集成,ES提供了REST API,方便获取ES数据结果。

在Kibana中,有一个索引管理工具。可以看到详细的索引描述。

常见 REST API

  1. 查看索引相关信息
    GET {index_name}
  2. 查看索引文档总数
    GET {index_name}/_count
  3. 通配符查询index
    GET _cat/indices/kibana*
  4. 查询状态为绿色的索引
    GET _cat/indices?v&health=green