elasticsearch6.7 01.入门指南(1)
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)的更多相关文章
- elasticsearch6.7 01.入门指南(2)
2.安装(略) 默认情况下,elasticsearch 使用端口 9200 来访问它的 REST API.如果有必要,该端口也可以配置 3.探索集群 3.1 The REST API 既然我们已经启动 ...
- elasticsearch6.7 01.入门指南(4)
5.Exploring Your Data(探索数据) Sample Dataset(样本数据集) 现在我们已经学会了基础知识,让我们尝试在更真实的数据集上操作.我准备了一份顾客银行账户信息的虚构的 ...
- elasticsearch6.7 01.入门指南(3)
4.Modifying Your Data(修改数据) Elasticsearch 提供了近实时的操纵数据和搜索的能力.默认情况下,从索引/更新/删除数据到在搜索结果中显示数据会有 1 秒的延迟(刷新 ...
- 现代OpenGL教程 01 - 入门指南
原文链接传送门 译序 早前学OpenGL的时候还是1.x版本,用的都是glVertex,glNormal等固定管线API.后来工作需要接触DirectX9,shader也只是可选项而已,跟固定管线一起 ...
- AngularJS快速入门指南01:导言
AngularJS使用新的attributes扩展了HTML AngularJS对单页面应用的支持非常好(SPAs) AngularJS非常容易学习 现在就开始学习AngularJS吧! 关于本指南 ...
- AngularJS快速入门指南02:介绍
AngularJS是一个JavaScript框架.它可以通过<script>标记被添加到HTML页面中. AngularJS通过指令对HTML属性进行了扩展,然后通过表达式将数据绑定到HT ...
- 《Gulp 入门指南》 : 使用 gulp 压缩 JS
<Gulp 入门指南> : 使用 gulp 压缩 JS 请务必理解如下章节后阅读此章节: 安装 Node 和 gulp 访问论坛获取帮助 压缩 js 代码可降低 js 文件大小,提高页面打 ...
- RequireJS 入门指南
RequireJS 入门指南 http://requirejs.org/ 简介如今最常用的JavaScript库之一是RequireJS.最近我参与的每个项目,都用到了RequireJS,或者是我向它 ...
- 《KAFKA官方文档》入门指南(转)
1.入门指南 1.1简介 Apache的Kafka™是一个分布式流平台(a distributed streaming platform).这到底意味着什么? 我们认为,一个流处理平台应该具有三个关键 ...
随机推荐
- 小程序json字符串转为对象
小程序里json字符串转为对象使用JSON.parse()方法转变无效, 看报错提示有单引号“ ' ” 因为单引号而无效, 将单引号全改双引号即可. 报错如下: VM11050:1 thirdScri ...
- docker gitlab安装
mkdir -p /data/docker/volumes/gitlab chmod 777 /data/docker/volumes/gitlab cd /data/docker/volumes/g ...
- 736. Parse Lisp Expression
You are given a string expression representing a Lisp-like expression to return the integer value of ...
- GC垃圾回收机制,iOS内存管理。
问题: MRC中通过调用静态方法创建的新对象,不再使用时需要对其发送release消息吗? 不需要,因为约定静态方法创建的对象会自动将其放入自动释放池,即已对其发送autorelease消息,因此不可 ...
- maya2014卸载/安装失败/如何彻底卸载清除干净maya2014注册表和文件的方法
maya2014提示安装未完成,某些产品无法安装该怎样解决呢?一些朋友在win7或者win10系统下安装maya2014失败提示maya2014安装未完成,某些产品无法安装,也有时候想重新安装maya ...
- WebView 错误码整理
在使用WebView中,我们不可避免的会接触到WebView加载失败的异常处理的需求,这时候,需要我们监听失败的方法也就是onReceivedError方法: public class CustomW ...
- HTML里面form表单name,action,method,target,enctype等属性用法
HTML里面的form表单里面的name,target,enctype,method以及action的用法 HML表单HTML里面的表单是HTML页面与浏览器交互的重要手段,表单主要提交一些客户端的数 ...
- python中stack在实际中的简单应用之进制转换
计算机的世界是二进制的,而人类的世界是十进制的,当数学公式用计算机表达时,经常 要转换.这就用到了进制的转换. 首先,我们先了解一下二进制和十进制的发展历史: 二进制: 现代的二进制首先由大数学家莱布 ...
- Linux - 日志文件简介
Linux日志文件绝大多数存放在/var/log目录,其中一些日志文件由应用程序创建,其他的则通过syslog来创建. Linux系统日志文件通过syslog守护程序在syslog套接字/dev/lo ...
- Spring 声明事务中transactionAttributes属性 + - Exception 实现逻辑
下面是一段典型的Spring 声明事务的配置: <bean id=“baseTxProxy” lazy-init=“true”class=“org.springframework.transac ...