Elasticsearch学习笔记之基础概念与安装

1. 简介

Elasticsearch是一个高度可扩展的开源的全文检索和分析引擎。它能够近乎实时的快速存储,搜索和分析大量数据。通常用作底层的引擎技术,为具有复杂搜索功能和要求的应用程序提供支持。

1.1. 基本概念(行业黑话)

  1. 近乎实时(Near Realtime (NRT))
    Elasticsearch是一个近乎实时的搜索平台。这意味着从索引一个文档到可以被搜索有一点延时(通常是一秒)。

  2. 集群(Cluster)
    集群是一个或多个节点(服务)集合,这些节点将您的整个数据集中在一起,并在所有节点上提供联合索引和搜索功能。集群由一个唯一的名称标识,默认名称为 “ElasticSearch”。此名称很重要,因为如果将节点设置为通过其名称加入集群,则节点只能是集群的一部分。

    请确保不要在不同的环境中重用相同的集群名称,否则最终可能会导致节点加入错误的集群。例如,您可以使用LoggingDev、LoggingStage和LoggingProd来用于开发、分段和生产集群。
    请注意,拥有一个只包含单个节点的集群是完全正常的。 此外,您还可以拥有多个独立的集群,每个集群都有自己唯一的集群名称。

  3. 节点(Node)

    节点是作为集群一部分的单个服务器,存储数据并参与集群的索引和搜索功能。与集群一样,节点由名称标识,默认情况下,该名称是在启动时分配给节点的随机通用唯一标识符(UUID)。如果不需要默认值,可以定义所需的任何节点名称。此名称对于管理目的非常重要,您可以在其中识别网络中的哪些服务器与Elasticsearch 集群中的哪些节点相对应。

    可以将节点配置为按集群名称加入特定集群。 默认情况下,每个节点都设置为加入名为elasticsearch的集群,这意味着如果您在网络上启动了许多节点并且假设 它们可以相互发现 - 它们将自动形成并加入一个名为elasticsearch的集群。

    在单个集群中,您可以拥有任意数量的节点。 此外,如果您的网络上当前没有其他Elasticsearch节点正在运行,则默认情况下启动单个节点将形成名为elasticsearch 的新单节点集群。

  4. 索引(Index)

    索引是具有某些类似特征的文档集合。 例如,您可以拥有客户数据的索引,产品目录的另一个索引以及订单数据的另一个索引。 索引由名称标识(必须全部为小写),并且此名称用于在对其中的文档执行索引,搜索,更新和删除操作时引用索引。

    在单个群集中,您可以根据需要定义任意数量的索引。

  5. 文档(Document)

    文档是可以被索引的基本信息单元。例如,您可以为单个客户创建一个文档,为单个产品创建另一个文档,为单个订单创建另一个文档。本文档以JSON表示,JSON是一种普遍存在的Internet数据交换格式。

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

  6. 分片和副本(Shards & Replicasedit)

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

    为了解决这个问题,Elasticsearch提供了将索引细分为多个称为分片的功能。创建索引时,只需定义所需的分片数即可。每个分片本身都是一个功能齐全且独立的“索引”,可以托管在集群中的任何节点上。

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

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

    分片的分配方式以及如何将其文档聚合回搜索请求的机制完全由Elasticsearch管理,对用户而言是透明的。

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

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

    • 它在分片或节点发生故障时提供高可用性。因此,需要注意的是,分片副本永远不会分配到它的原始(主)分片所在的节点上。

    • 它允许你扩展搜索量或吞吐量,因为可以在所有副本上并行执行搜索。

    总而言之,每个索引可以分割成多个分片。索引也可以被复制零次(意味着没有副本)或多次。复制后,每个索引将具有主分片(从中复制的原始分片)和副本分片 (主分片的副本)。

    可以在创建索引时为每个索引定义碎片和副本的数量。创建索引后,您还可以随时动态更改副本的数量。您可以使用-shrink和_split API更改现有索引的分片数量,但是这不是一项简单的任务,并且预先计划正确数量的分片是最佳方法。

    默认情况下,Elasticsearch中的每个索引都分配了5个主分片和1个副本,这意味着如果群集中至少有两个节点,则索引将包含5个主分片和另外5个副本分片(1个完整副本),总计为每个索引10个分片。

    注意:每个ElasticSearch分片都是一个Lucene索引。在一个Lucene索引中,文档数量有个最大数限制。从Lucene-5843起,限制为2147483519(=integer.max_value-128)个文档。您可以使用 cat/shards api监视分片大小。

2. 安装

注意: 强烈建议不要安装在系统默认的Program Files 或者Program Files(x86)这个样的文件夹下,因为在windows环境下此类文件夹下的文件程序只有只读权限(当程序在运行的时候,我用java写了一个demo尝试获取写权限程序就发生了异常),引发的问题后续也会讲。

本次学习是基于6.5.4版本,要求JDK至少是8,系统是Win7。windows中安装es官网建议使用MSI Installer package来安装,安装过程比较简单,具体步骤参考官网windows安装教程

2.1. head插件的安装

  1. 安装Nodejs的环境
    官网下载安装对应操作系统的安装包,我的机子是64位的win7,所以下载了msi包,如下所示:

Elasticsearch学习笔记之基础概念与安装_第1张图片
安装过程比较简单,双击按照提示安装即可,完成之后在nodejs的安装目录打开CMD(小窍门:按住shift右击,选择在此处运行命令窗口即可将cmd中的位置定位当当前打开的路径), 运行 node -v 查看node的版本号。
Elasticsearch学习笔记之基础概念与安装_第2张图片
2. 安装grunt

继续在当前命令行中执行: npm install -g grunt-cil 安装grunt,我的已安装这里就不演示了,如果你的网络没有上网策略的限制的话一般都能安装成功。 接着执行grunt -version 可以查看grunt的版本。
Elasticsearch学习笔记之基础概念与安装_第3张图片
3. 下载head的压缩包(图示)
Elasticsearch学习笔记之基础概念与安装_第4张图片
Elasticsearch学习笔记之基础概念与安装_第5张图片
Elasticsearch学习笔记之基础概念与安装_第6张图片

然后将压缩包解压,解压完成之后在进入到head插件的目录, 在cmd中运行npm install, 执行完成之后执行 npm run start
或者grunt server即可启动。
Elasticsearch学习笔记之基础概念与安装_第7张图片

访问localhost:9100即可验证。

  1. 配置ES的跨域

安装完成之后还需要最后一步为ES配置跨域,只需要修改ES的配置文件elasticsearch.yml。加入下面两句即可:

http.cors.allow-origin: '*'
http.cors.enabled: true

配置完成之后需要重启es,在bin目录下双击elasticsearch.exe即可。

  1. 效果展示
    安装完成之后连接es,es的http端口默认是9200,所以我直接默认连接如下:
    Elasticsearch学习笔记之基础概念与安装_第8张图片

概览最上面看到的是索引,我有两个索引,userinfo和book。下面是节点,我只有一个节点node_doudou,节点上可以看到每个索引有五个分片,虚线框代表是主分片,细线框代表的是分片副本,对应数字的细线框是对应数字的粗线框的分片副本。因为我的机器上只有一个es,所以没有其他的集群节点也就没有副本,如果要在同一个机器上安装多个es那么就不能采用msi安装,需要下载es的zip包,然后去配置es的配置文件,组成一个集群。

你可能感兴趣的:(Elasticsearch,java)