1 elasticsearch 入门指南

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

1.1 基础概念

下面介绍一些Elasticsearch的核心概念。从一开始了解这些概念有助于我们的学习过程。

1.1.1 Near Realtime(NRT 近实时)

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

1.1.2 Cluster(集群)

cluster(集群)是一个或者多个节点的集合,它们一起保存数据并且提供所有节点联合索引以及搜索功能。集群存在一个唯一的名字身份且默认为"elasticsearch"。这个名字非常重要,因为如果节点安装时通过它自己的名字加入到集群中的话,那么一个节点只能是一个集群中的一部分。
请确保您在不同环境中不要重复使用相同的集群名字,否则您可能最终会将节点加入到了错误的集群中。例如,您可以使用logging-devlogging-stage,以及logging-prod用于development(开发),staging(演示)和production(生产)集群。
注意,一个集群如果只有一个结点也是有效的,并且完全可行的。此外,您还可以有多个独立的集群并且每个集群都有它自己唯一的cluster name(集群名)。

1.1.3 Node(节点)

node(节点)是一个单独的服务器,它是集群的一部分,存储数据,参与集群中的索引和搜索功能。像一个集群一样,一个节点通过一个在它启动时默认分配的一个随机的UUID(通用唯一标识符)名称来识别。如果您不想使用默认名称您也可自定义任何节点名称。这个名字是要识别网络中的服务器对应这在您的Elasticsearch集群节点管理的目的是很重要的。
节点可以通过配置cluster name来加入到指定的集群中。默认情况下,每个节点安装时都会加入到名为elasticsearch的集群中,这也就意味着如果您在网络中启动许多节点--假设它们可以发现彼此–它们全部将自动的构成并且加入到一个名为elasticsearch的单独的集群中。
在一个集群中,你需要多少就可以添加多少结点。此外,如果在当前网络中没有其它elasticsearch结点在运行,则启动一个结点将会默认形成一个叫elasticsearch的单结点集群。

1.1.4 Index(索引)

index(索引)是具有稍微类似特征文档的集合。例如,您有一个消费者数据的索引,一个产品目录的索引,和另一个是订单数据的索引。一个索引通过名字(必须全部是小写)来标识,并且该名字在对document(文档)执行indexing(索引),search(搜索),update(更新)和delete(删除)操作时会涉及到。
在一个单独的集群中,您可以定义您想要的许多索引。

1.1.5 Type(类型)

6.0.0之后废弃

Index(索引)中,可以定义一个或多个类型。一个类型是索引中一个逻辑的种类/分区,它的语义完全取决于您自己。一般情况下,一个类型被定义成一组常见字段的文档。例如,假设您运行着一个博客平台并且在一个单独的索引中存储了所有的数据。在这个索引中,您也许定义了一个用户数据类型,博客数据类型,和评论数据类型。

1.1.6 Document(文档)

document(文档)是索引信息的基本单位。例如,您有一存储customer(客户)数据的文档,另一个是存储product(产品)数据的文档,还有一个是存储order(订单)数据的文档。该文档可以使用JSON来表示,它是一种无处不在的互联网数据交换格式。
在索引/类型中,您可以存储许多文档。注意,尽管一个文档物理的存在于索引中,实际上一个文档必须被索引/分配给索引内的类型。

1.1.7 Shards&Replicas(分片&副本)

索引可以存储大量数据,可以超过单个节点的硬件限制。例如,十亿个文档占用了1TB的磁盘空间的单个索引可能不适合放在单个节点的磁盘上,并且从单个节点服务请求会变得很慢。
为了解决这个问题,Elasticsearch提供了把Index(索引)拆分到多个Shard(分片)中的能力。在创建索引时,您可以简单的定义Shard(分片)的数量。每个Shard本身就是一个fully-functional(全功能的)和独立的"Index(索引)",(Shard)它可以存储在集群中的任何节点上。
Sharding(分片)非常重要两个理由是:

  • 水平的拆分/扩展。
  • 分布式和并行跨Shard操作(可能在多个节点),从而提高了性能/吞吐量。

Shard的分布式机制以及它的文档是如何聚合支持搜索请求是完全由Elasticsearch管理的,并且是对用户透明的。
在网络/云环境中可能随时会故障,无论出于何种原因,在shard/node不知何故会离线或者消失的情况下强烈建议设置故障转移是非常有效的。为了达到这个目的,Elasticsearch可以让您设置一个或多个索引的Shard副本到所谓的副本分片,或者副本中去。
副本非常重要的两个理由是:

  • shard/node故障的情况下提供了高可用性。为了达到这个目的,需要注意的是在原始的主Shard被复制时副本的Shard不会被分配到相同的节点上。
  • 它可以让你水平扩展搜索量/吞吐量,因为搜索可以在所有的副本上并行执行。

总而言之,每个索引可以被拆分成多个分片,一个索引可以设置0个(没有副本)或多个副本。开启副本后,每个索引将有主分片(被复制的原始分片)和副本分片(主分片的副本)。分片和副本的数量在索引被创建时都能够被指定。在创建索引后,您也可以在任何时候动态的改变副本的数量,但是不能够改变分片数量。
默认情况下,Elasticsearch中的每个索引分配了5个主分片和1个副本,这也就意味着如果您的集群至少有两个节点的话,您的索引将会有5个主分片和另外5个副本分片(1个完整的副本),每个索引共计10个分片。

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

1.2 安装

Elasticsearch需要的Java最低版本为Java 8.
下载

curl -L -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.4.0.tar.gz

解压

tar -xvf elasticsearch-6.4.0.tar.gz

进入目录

cd elasticsearch-6.4.0/bin

启动

./elasticsearch

像前面提到的一样,我们可以覆盖集群或者节点的名称。在命令行中启动Elasticsearch时是可以做到的,如下所示 :

./elasticsearch -Ecluster.name=my_cluster_name -Enode.name=my_node_name

默认情况下,Elasticsearch使用端口9200来访问它的REST API。如果有必要,该端口也可以配置。

1.3 探索集群

1.3.1 The REST API

既然我们已经启动并且运行了我们的节点(和集群),下一步是去了解如何与它通信。幸运的是,Elasticsearch提供了一个非常全面且强大的REST API,您可以使用它来与集群进行交互。可以使用API来完成如下的几件事情:

  • 检查集群、节点和索引的健康,状态和统计信息。
  • 管理集群、节点和索引数据以及元数据。
  • 针对索引执行CRUD(CreateReadUpdate,和Delete)和搜索操作。
  • 执行高级搜索,例如pagingsortingfilteringscriptingaggregations等等。

1.4 总结

Elasticsearch既是一个简单,又是一个复杂的产品。我们现在学会了它的基础部分,如何去看它内部,以及如何使用一些REST API来操作它。我希望本教程可以让您更好的了解Elasticsearch是什么,更重要的是,可以促使你进一步尝试它更强大的功能。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,692评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,482评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,995评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,223评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,245评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,208评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,091评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,929评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,346评论 1 311
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,570评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,739评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,437评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,037评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,677评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,833评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,760评论 2 369
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,647评论 2 354

推荐阅读更多精彩内容

  • 关于Mongodb的全面总结 MongoDB的内部构造《MongoDB The Definitive Guide》...
    中v中阅读 31,928评论 2 89
  • 博客原文一博客原文二 翻译作品,水平有限,如有错误,烦请留言指正。原文请见 官网英文文档 起步 Elasticse...
    rabbitGYK阅读 3,252评论 0 68
  • 简介 Elasticsearch是一个高可扩展的开源全文搜索和分析引擎,它允许存储、搜索和分析大量的数据,并且这个...
    零度沸腾_yjz阅读 5,525评论 0 8
  • 0222今天是我第一次忘记要看你的步数,挺好 你每天走的步数都差不多,不知道你每天都干嘛 0219为什么还是会梦到...
    香丘阅读 465评论 0 0