Elasticsearch 是一个高度可扩展且开源的全文检索和分析引擎。它可以让您快速、近实时地存储、检索以及分析海量数据。它通常用作那些具有复杂搜索功能和需求的应用的底层引擎或者技术。
下面是 Elasticsearch 一些简单的使用案例 :

  • 你经营一家网上商店,允许你的客户搜索你销售的产品。在这种情况下,您可以使用 Elasticsearch 来存储您的整个产品的目录和库存,并且为他们提供搜索和自动完成的建议。
  • 您希望收集日志或事务数据,并且希望分析和挖掘这些数据以查找趋势、统计数据、摘要或异常。在这种情况下,您可以使用logstash(elasticsearch/logstash/kibana堆栈的一部分)来收集、聚合和分析您的数据,然后让logstash将这些数据输入elasticsearch。一旦数据进入ElasticSearch,您就可以运行搜索和聚合来挖掘您感兴趣的任何信息。
  • 您运行一个价格警报平台,它允许价格精明的客户指定一个规则,例如“我有兴趣购买特定的电子小工具,如果小工具的价格在下个月内低于任何供应商$x,我希望得到通知”。在这种情况下,您可以获取供应商价格,将其推送到ElasticSearch,并使用其反向搜索(Percolator)功能根据客户查询匹配价格变动,最终在找到匹配后将警报推送给客户。
  • 您有分析/商务智能需求,并且希望快速调查、分析、可视化并针对大量数据(想想数百万或数十亿条记录)提出特别问题。在这种情况下,您可以使用ElasticSearch来存储数据,然后使用Kibana(ElasticSearch/Logstash/Kibana堆栈的一部分)来构建自定义仪表盘,以可视化对您重要的数据方面。此外,还可以使用ElasticSearch聚合功能对数据执行复杂的商业智能查询。

对于本教程的其余部分,我将引导您完成 Elasticsearch 的启动和运行的过程,同时了解其原理,并执行像indexing(索引),searching(查询)和 modifing(修改)数据的基础操作。在本教程的最后一部分,您应该可以清楚的了解到 Elasticsearch 是什么,它是如何工作的,并有希望获得启发。看您如何使用它来构建复杂的搜索应用程序或者从数据中挖掘出想要的信息。

1、基本概念

这里有一些关于 Elasticsearch 的核心概念。从一开始了解这些概念有助于减少学习过程。

1.1 Near Realtime(NRT 近实时)

Elasticsearch 是一个近实时的搜索平台。这意味着从您索引一个文档开始直到它可以被查询时会有轻微的延迟时间(通常为一秒)。

1.2 Cluster(集群)

集群是一个或者多个节点(服务器)的集合,它们一起保存您的数据,并且所有节点提供联合索引以及搜索功能。集群存在一个唯一的名称标识,该名称默认为 “elasticsearch”。这个名字非常重要,因为如果要将节点加入集群,只能通过设置相同的集群名称加入对应的集群。

请确保在不同环境中使用不同的集群名称,否则可能最终会将节点加入到了错误的集群中。例如,可以使用 logging-dev,logging-stage,以及 logging-prod 用于 development(开发),staging(演示)和 production(生产)集群。

注意,一个有效的良好运行的集群至少要有一个节点。此外,还可以有多个独立的集群并且每个集群都有它自己唯一的cluster name(集群名)。

1.3 Node(节点)

节点是一个单独的服务器,它是集群的一部分,存储数据,并参与集群中的索引和搜索功能。像集群一样,节点也由一个名称标识,默认情况下,该名称是在启动时分配的一个随机的 UUID(通用唯一标识符)。如果不想使用默认名称也可自定义任何节点名称。此名称对于管理目的很重要,因为您希望确定网络中的哪些服务器对应于ElasticSearch集群中的哪些节点。

可以通过配置 cluster name 指定节点加入到对应的集群中。默认情况下,每个节点都会被加入到名为 elasticsearch 的集群中,这也就意味着如果您在网络中启动许多节点(假设它们可以发现彼此),那么它们都将自动形成并加入一个名为 elasticsearch 的集群。

在单个集群中,您可以拥有任意多个节点。此外,如果在当前网络中没有其它 elasticsearch 结点在运行,则启动一个结点将会默认形成一个叫 elasticsearch 的单结点集群。

1.4 Index(索引)

索引是具有某种相似特性的文档集合。例如,您有一个消费者数据的索引,一个产品目录的索引,和一个订单数据的索引。索引通过一个名字(必须全部是小写)来标识,并且该名字在对 document(文档)执行 indexing(索引),search(搜索),update(更新)和 delete(删除)操作时会涉及到。

在单集群中,您可以定义多个索引。

1.5 Type(类型)

在 Index(索引)中,可以定义一个或多个类型。一个类型是索引中一个逻辑的种类/分区,它的语义完全取决于您自己。一般情况下,一个类型被定义成一组常见字段的文档。例如,假设您运行着一个博客平台并且在一个单独的索引中存储了所有的数据。在这个索引中,您也许定义了一个用户数据类型,博客数据类型,和评论数据类型。根据规划,Elastic 6.x 版只允许每个 Index 包含一个 Type,7.x 版将会彻底移除 Type。

一种类型曾经是索引的逻辑类别/分区,允许您在同一索引中存储不同类型的文档,例如一种类型用于用户,另一种类型用于博客文章。在一个索引中不能再创建多个类型,在以后的版本中将删除类型的整个概念。有关详细信息,请参见删除映射类型以获取更多信息。

1.6 Document(文档)

文档是索引信息的基本单位。例如,您可以为单个客户创建一个文档,为单个产品创建另一个文档,为单个订单创建另一个文档。文档以 JSON 来表示,它是一种常见的互联网数据交换格式。

在索引/类型中,您可以存储任意多的文档。请注意,尽管文档实际上驻留在索引中,但文档实际上必须被索引/分配给索引中的类型。

1.7 Shards & Replicas(分片 & 副本)

索引可以存储大量数据,这些数据可能会超出单个节点的硬件限制。例如,占用1TB磁盘空间的10亿个文档的单个索引可能不适合单个节点的磁盘,或者速度太慢,无法单独满足单个节点的搜索请求。

为了解决这个问题,Elasticsearch 提供了把 Index(索引)拆分到多个 Shard(分片)中的功能。在创建索引时,只需要简单的定义 Shard(分片)的数量。每个 Shard 本身就是一个 fully-functional(功能齐全)和独立的 “Index(索引)”,可以存储在集群中的任何节点上。

分片非常重要,主要有两个原因:

  • 它允许您水平拆分/缩放内容量
  • 它允许您跨分片(可能在多个节点上)分布和并行操作,从而提高性能/吞吐量

如何分配分片以及如何将其文档聚合回搜索请求的机制完全由ElasticSearch管理,并且对作为用户的您来说是透明的。

在随时可能发生故障的网络/云环境中,非常有用,强烈建议在分片/节点以某种方式脱机或因任何原因消失时使用故障转移机制。为此,ElasticSearch允许您将索引分片的一个或多个副本制作成所谓的副本分片,简称为副本。

副本非常重要,主要有两个原因:

  • 它在分片/节点发生故障时提供了高可用性。因此,副本分片永远不会与主分片在相同的节点上。
  • 它可以让你水平扩展搜索量/吞吐量,因为搜索可以在所有的副本上并行执行。

总而言之,每个索引可以被拆分成多个分片,一个索引可以设置 0 个(没有副本)或多个副本。开启副本后,每个索引将有主分片(被复制的原始分片)和副本分片(主分片的副本)。

可以在创建索引时为每个索引定义分片和副本的数量。创建索引后,您可以在任何时候动态的改变副本的数量。您还可以使用shrink(收缩)split(拆分) API更改现有索引的分片数,但这不是一项简单的任务,预先计划正确数量的分片是最佳方法。
默认情况下,Elasticsearch 中的每个索引分配了 5 个主分片和 1 个副本,这也就意味着如果您的集群至少有两个节点的话,您的索引将会有 5 个主分片和另外 5 个副本分片(1 个完整的副本),每个索引共计 10 个分片。

7.0此处变更为如下所述:

默认情况下,Elasticsearch中的每个索引都分配了一个主分片和一个副本,这意味着如果群集中至少有两个节点,则索引将具有一个主分片和另一个副本分片(一个完整副本),每个索引总共2个分片。

注意 :
每个 Elasticsearch 分片是一个 Lucene 索引。在单个 Lucene 索引中有一个最大的文档数量限制。从 LUCENE-5843 的时候开始,该限制为 2,147,483,519(=Interger.MAX_VALUE - 128)个文档。您可以使用 _cat/shards api 来监控分片大小。

理解了这些基础概念之后,让我们开始接触更有趣的部分

elasticsearch6.7 01.入门指南(1)的更多相关文章

  1. elasticsearch6.7 01.入门指南(2)

    2.安装(略) 默认情况下,elasticsearch 使用端口 9200 来访问它的 REST API.如果有必要,该端口也可以配置 3.探索集群 3.1 The REST API 既然我们已经启动 ...

  2. elasticsearch6.7 01.入门指南(4)

    5.Exploring Your Data(探索数据) Sample Dataset(样本数据集) 现在我们已经学会了基础知识,让我们尝试在更真实的数据集上操作.我准备了一份顾客银行账户信息的虚构的 ...

  3. elasticsearch6.7 01.入门指南(3)

    4.Modifying Your Data(修改数据) Elasticsearch 提供了近实时的操纵数据和搜索的能力.默认情况下,从索引/更新/删除数据到在搜索结果中显示数据会有 1 秒的延迟(刷新 ...

  4. 现代OpenGL教程 01 - 入门指南

    原文链接传送门 译序 早前学OpenGL的时候还是1.x版本,用的都是glVertex,glNormal等固定管线API.后来工作需要接触DirectX9,shader也只是可选项而已,跟固定管线一起 ...

  5. AngularJS快速入门指南01:导言

    AngularJS使用新的attributes扩展了HTML AngularJS对单页面应用的支持非常好(SPAs) AngularJS非常容易学习 现在就开始学习AngularJS吧! 关于本指南 ...

  6. AngularJS快速入门指南02:介绍

    AngularJS是一个JavaScript框架.它可以通过<script>标记被添加到HTML页面中. AngularJS通过指令对HTML属性进行了扩展,然后通过表达式将数据绑定到HT ...

  7. 《Gulp 入门指南》 : 使用 gulp 压缩 JS

    <Gulp 入门指南> : 使用 gulp 压缩 JS 请务必理解如下章节后阅读此章节: 安装 Node 和 gulp 访问论坛获取帮助 压缩 js 代码可降低 js 文件大小,提高页面打 ...

  8. RequireJS 入门指南

    RequireJS 入门指南 http://requirejs.org/ 简介如今最常用的JavaScript库之一是RequireJS.最近我参与的每个项目,都用到了RequireJS,或者是我向它 ...

  9. 《KAFKA官方文档》入门指南(转)

    1.入门指南 1.1简介 Apache的Kafka™是一个分布式流平台(a distributed streaming platform).这到底意味着什么? 我们认为,一个流处理平台应该具有三个关键 ...

随机推荐

  1. python3 与 Django 连接数据库报错:ImportError: No module named 'MySQLdb'

    在 python2 中,使用 pip install mysql-python 进行安装连接MySQL的库,使用时 import MySQLdb 进行使用 在 python3 中,改变了连接库,改为了 ...

  2. Hadoop和一般数据库的区别?

    难道一般的数据库比如PostgreSQL就不可以做集群吗?像Oracle.SQL Sever它们就没有发明这一功能吗? https://www.jianshu.com/p/525cfe07badc H ...

  3. 【python接口自动化测试教程】00---00章节就代表开篇吧

    今天突然想写个接口测试教程,由于本人是初级的比小白稍微好那么一丢丢,所以不知道能不能坚持下来 写的不对的地方还请大咖指教 先去忙自己的工作了,忙完了回来开始写第一章吧 或者先写个大纲,要不然写的章节会 ...

  4. mysql大全

    1.说明:创建数据库 CREATE DATABASE database-name 2.说明:删除数据库 drop database dbname 3.说明:备份sql server --- 创建 备份 ...

  5. NET Core微服务之路:实战SkyWalking+Exceptionless体验生产环境下的追踪系统

    前言 当一个APM或一个日志中心实际部署在生产环境中时,是有点力不从心的. 比如如下场景分析的问题: 从APM上说,知道某个节点出现异常,或延迟过过高,却不能及时知道日志反馈情况,总不可能去相应的节点 ...

  6. iOS编码规范(简版)

    1. 总体指导原则 [规则1-1]首先是为人编写程序,其次才是计算机. 说明:这是软件开发的基本要点,软件的生命周期贯穿产品的开发.测试.生产.用户使用.版本升级和后期维护等长期过程,只有易读.易维护 ...

  7. [UWP]使用Picker实现一个简单的ColorPicker弹窗

    在上一篇博文<[UWP]使用Popup构建UWP Picker>中我们简单讲述了一下使用Popup构建适用于MVVM框架下的弹窗层组件Picker的过程.但是没有应用实例的话可能体现不出P ...

  8. 【接口时序】4、SPI总线的原理与Verilog实现

    一. 软件平台与硬件平台 软件平台: 1.操作系统:Windows-8.1 2.开发套件:ISE14.7 3.仿真工具:ModelSim-10.4-SE 硬件平台: 1. FPGA型号:Xilinx公 ...

  9. C#6.0语言规范(一) 介绍

    C#(发音为“See Sharp”)是一种简单,现代,面向对象,类型安全的编程语言.C#源于C语言系列,对C,C ++和Java程序员来说很熟悉.EC#International将EC#标准化为ECM ...

  10. Web开发经验谈之F12开发者工具/Web调试[利刃篇]

    引语:如今的整个Web开发行业甚至说整个软件开发行业,已经相当成熟,基本上已经很少找不到没有前人做过的东西了,或者换句话说,你想要实现的功能,你总能在某个地方搜索到答案,关键是你有没有这个时间精力去搜 ...