ElasticSearch是面向文档的

ElasticSearch是面向文档的,在ElasticSearch中,一切数据都是json文档。
前期可以把ElasticSearch当做是数据库看待理解,可以更好地上手ElasticSearch。
关系型数据库和ElasticSearch的概念类比:

关系型数据库 ElasticSearch
数据库(databases) 索引(indices)
表(tables) 类型(types)
行(rows) 文档(documents)
字段(columns) 字段(fields)

ElasticSearch(集群)中可以包含多个索引(数据库),每个索引可以包含多个类型(表),每个类型可以包含多行(文档),每个文档可以包含多个字段(Fields)。

文档

文档就是一条条数据。
每个文档都有一个文档Id,我们可以通过 索引/类型/文档Id 来定位一个文档。文档Id不是必须要整数,实际上它是字符串。

user(类型){//文档1"name":"YeHaocong","age":18}{//文档2"name":"YeHaoxian","age":17}

文档的几个重要属性:

  • 自我包含:一篇文档同时包含字段和对应的值,也就是同时包含key/value。
  • 可以是层次型的:一个文档包含自另外一个文档,复杂的逻辑实体就是这样来的,实际上就是一个json串。用面向对象就是一个对象包含了另外一个对象。
  • 灵活的结构:文档不依赖于预先定义的模式,我们知道关系型数据库中,需要提前定义字段才能使用,在ElasticSearch中,对于字段是非常灵活的,有时我们可以忽略该字段,有时可以动态添加一个新字段。
    比如:
user(类型){//文档1"name":"YeHaocong","age":18}{//文档2"name":"YeHaoxian","fatherName":"YeMenGuang"}
类型

类型是文档的逻辑容器,就像关系型数据库一样,表格是行的容器。类型中对于字段的定义叫映射,比如name映射为字符串类型。比如可以对user类型的name字段与String类型做一个映射。
我们说文档是无模式的,它们不需要拥有映射中所定义的所有字段,比如新增一个字段,ElasticSearch会自动将新字段加入映射,但是不能确定这个字段是什么类型,所有ElasticSearch就会猜,比如值是18,就认为他是整形字段。但是ElasticSearch不可能保证每次都猜对,所以最安全的方式就是提前定义好所需的映射,这一点就跟关系型数据库殊途同归了,先定义好字段,再使用。

索引

类比数据库。
索引是映射类型的容器,ElasticSearch索引是一个非常大的文档集合。索引存储了映射类型的字段和其他设置,类型文档等,看作一个数据库,然后他们被存储到各个分片上。

节点与分片

一个ElasticSearch集群至少有一个节点,节点就是一个ElasticSearch服务进程,一个节点可以有多个索引。默认的,如果你创建一个索引,那么索引默认将会有5个分片(主分片)构成,每一个主分片都会有一个复制分片(副本)。分片是对索引数据的拆分。

上图说明:
上图是可能一个索引的分片在一个集群的三个节点中分布的情况的一种可能,p1-p5为主分片,p1_b-p5_b为对应的复制分片。可以看到,主分片和对应的复制分片都不会在同一个节点上,这是为了容灾,这样某个节点挂了,数据也不至于丢失,实际上,一个分片就是一个Lucene索引,一个包含倒排索引的文件目录。倒排索引使得ElasticSearch可以在不扫描全部文档的情况下,告诉你哪些文档具有特定的关键字。

倒排索引

ElasticSearch使用的是一种称为倒排索引的数据结构,采用Lucene的倒排索引作为底层,这种结构适用于快速的全文检索,一个索引文档中所有不重复的列表构成,对于每一个词,都有包含他的一个文档列表。

倒排索引就是索引倒过来了,以文档Id作为值,以关键字作为索引,更像一种散列表的结构。

比如有下面两个文档

Study every day  #文档1包含内容
Learn No day  #文档2包含内容

为了创建倒排索引,需要将文档内容拆分成独立的词(分词),然后创建一个包含所有不重复的词条排序列表,然后列出每个词条出现的文档Id。

词条 包含的文档Id
Study 1
every 1
day 1,2
Learn 2
No 2

更像是一个hashmap结构,key是词条,不可重复,value是包含该词条的文档Id集合。

如果输入Study查询,就直接定位到文档1中,而不用扫描所以的文档。

比如检索 every day ,它就会定位到文档1和文档2,但是,由于文档1两个词都有,而文档2只有day,所以文档1的匹配度更高,分数score更高。如果没有其他条件,则两个文档都会返回。

在ElasticSearch中,索引这个词被频繁使用,在ElasticSearch中,索引被分成多个分片,每个分片是一个Lucene索引,所以一个ElasticSearch索引是由多个Lucene索引组成的,如无特指,说起索引指的是ElasticSearch索引。

ElasticSearch的一些核心概念相关推荐

  1. 2021年大数据ELK(五):Elasticsearch中的核心概念

    全网最详细的大数据ELK文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 系列历史文章 Elasticsearch中的核心概念 一.索引 index 二 ...

  2. 15分钟掌握Elasticsearch 8大核心概念与基础用法

    Elastic已经形成了一个较为庞大的生态,这个生态的核心就是Elasticsearch.初学者的重点就是如何快速地了解并使用Elasticsearch,本文总结了Elasticsearch的8大核心 ...

  3. ElasticSearch 核心概念介绍_02

    文章目录 1. 集群(Cluster) 2. 节点(Node) 3. 索引(Index) 4. 类型(Type) 5. 文档(Document) 6. 分片(Shards) 7. 副本(Replica ...

  4. lucene和elasticsearch的前世今生、elasticsearch的核心概念、elasticsearch核心概念 vs. 数据库核心概念(来自学习资料)

    1.Lucene和elasticsearch的前世今生 lucene,最先进.功能最强大的搜索库,直接基于lucene开发,非常复杂,api复杂(实现一些简单的功能,写大量的java代码),需要深入理 ...

  5. Elasticsearch学习系列-ElasticSearch 核心概念

    导语   这篇文章中主要分享关于ElasticSearch相关的基础知识,介绍一下关于ElasticSearch相关的术语以及它的架构相关的内容 文章目录 ElasticSearch 简介 Elast ...

  6. 一文说清Elasticsearch的核心概念

    本文来说下有关Elasticsearch的核心知识 文章目录 概述 生活中的数据 先说说Lucene ES核心概念 集群(Cluster) 分片(Shards) 副本(Replicas) 映射(Map ...

  7. Elasticsearch学习之基本核心概念

    在Elasticsearch中有许多术语和概念 1. 核心概念 Elasticsearch集群可以包含多个索引(indices)(数据库),每一个索引可以包含多个类型(types)(表),每一个类型包 ...

  8. ElasticSearch系列——Kibana,核心概念

    ElasticSearch系列--Kibana,核心概念 Kibana 下载地址 Windows安装 修改配置文件 启动Kibana 验证 ES核心概念 Index索引 Mapping映射 Docum ...

  9. Elasticsearch是什么以及核心概念

    Elasticsearch是什么 Elasticsearch是一个高度可扩展的开源全文搜索和分析引擎.它可以在很短的时间内存储,搜索和分析大量的数据.它通常作为具有复杂搜索场景情况下的核心发动机.我们 ...

最新文章

  1. linux明日命令(6):rm命令
  2. tensorflow2 tensorboard可视化使用
  3. (转载)9个主流的开源许可协议[整理]
  4. php调用image类提示不存在的字体,php – 无效的字体文件名(imagettfbox)
  5. 一个自动生成关键字索引页面的比处理文件
  6. linux中网页播放音乐,Linux_在Linux系统下播放网页中的背景音乐技巧,在Linux中的firefox浏览许多网页 - phpStudy...
  7. 如何用极路由新插件【搜狐视频】进行远程下载
  8. new 操作符干了什么?
  9. CCIE学习(4)——VLAN基础
  10. struts2+spring 项目中配置tiles的解决方案
  11. Nginx编译./configure翻译
  12. 技术升级成为Linux运维人前途的魔障,是跟进还是选择被淘汰?
  13. 机器人开发--编码器
  14. Thinkpad E570/580可用的黑苹果EFI
  15. C语言的红外计数程序,51单片机红外计数器 电路原理图+PCB+源程序等资料分享
  16. 为什么使用多线程,多线程如何提高效率
  17. 计算机一级打字要注意什么,用键盘打字时要注意什么 怎样用键盘来练习打字...
  18. 标签类目体系(面向业务的数据资产设计方法论)-读书笔记3
  19. 微信公众平台开发【发送消息】被动回复消息
  20. iVMS-4200 Vs区别_【欧国联:德国 VS 瑞士】体育足球赛事专业紅單推荐

热门文章

  1. Java学习笔记1.1.1 搭建Java开发环境 - Java概述
  2. Scala学习笔记03:操作符
  3. 【BZOJ3048】Cow lineup,贪心+队列维护(或二分答案)
  4. Be动词的缩写形式_3
  5. 2017.8.8 魔兽地图DotR 思考记录
  6. 【英语学习】【Level 08】U01 Let's Read L4 Hot off the press
  7. 五子棋服务端程序java_9网上五子棋对战(java)服务端源码
  8. 华锋e路航x10升级工具_电芯终身质保,续航301公里的奔奔E-star代步如何?
  9. 微服务跨数据库联合查询_数据库跨库查询
  10. Ubuntu安装指定版本clang-format