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. docker学习笔记-命令大全

    容器生命周期管理 • Run OPTIONS说明: • -a :显示所有的容器,包括未运行的. • -f :根据条件过滤显示的内容. • --format :指定返回值的模板文件. • -l :显示最 ...

  2. Django Admin 专题

    Django admin Django强大的功能之一就是提供了Admin后台管理界面,简单配置就可以对数据库内容做管理 创建ModelAdmin并注册 from django.contrib impo ...

  3. 谈谈最近的想法和 Thoughtworks 的 Offer

    最近笔者一直没有记录博客,原因是因为卷入了面试,离职,谈判,思考等一系列事件中.不过可以先说明一下的是, 笔者最后还是拒绝了 Thoughtworks 的 Offer,继续留在目前的公司. 去年毕业后 ...

  4. Lambda表达式where过滤数据

    使用Lambda的表达式来过滤符合条件的数据.下面的代码实现,是把字符阵列中,把名字长度等于3元素找出来. class Bv { public void LambdaExpression() { st ...

  5. 背水一战 Windows 10 (78) - 自定义控件: 基础知识, 依赖属性, 附加属性

    [源码下载] 背水一战 Windows 10 (78) - 自定义控件: 基础知识, 依赖属性, 附加属性 作者:webabcd 介绍背水一战 Windows 10 之 控件(自定义控件) 自定义控件 ...

  6. vscode 集成 cygwin 的注意事项

    vscode 集成 cygwin vscode 现在是我的主力开发编辑器,它自带 terminal 不需要我各种切换,我还想要在 windows 下执行一些简单的 .sh 文件.所以,我希望有一款工具 ...

  7. 【BJOI2019】删数 线段树

    题目大意:一个数列若能在有限次数内删空,则称这个数列可以删空,一次删除操作定义如下: 记当前数列长度为$k$,则删掉数列中所有等于$k$的数. 现在有一个长度为$n$的数列$a$,有$m$次修改操作, ...

  8. [Leetcode]827.使用回溯+标记解决最大人工岛问题

    在二维地图上, 0代表海洋, 1代表陆地,我们最多只能将一格 0 海洋变成 1变成陆地. 进行填海之后,地图上最大的岛屿面积是多少?(上.下.左.右四个方向相连的 1 可形成岛屿) 示例 1: 输入: ...

  9. [EXP]Apache Tika-server < 1.18 - Command Injection

    #################################################################################################### ...

  10. EF code first,set composite primary key 复合key问题

    环境: EF core 2.0 Net core 2.0 错误: 因实体定义了多个key,打开数据库时程序报以下错误 An unhandled exception occurred while pro ...