一、简介

ElasticSearch是一个基于Lucene构建的开源,分布式,RESTful搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。支持通过HTTP使用JSON进行数据索引。

Lucene只是一个框架,要利用它的功能,需要使用JAVA,并且在程序中集成Lucene。更糟的是,Lucene非常复杂,需要做很多的学习了解,才能明白它是如何运行的。

Elasticsearch使用Lucene作为内部引擎,但是在使用它做全文搜索时,只需要使用统一开发好的API即可,请不需要了解其背后复杂的Lucene的运行原理。所以ElasticSearch可以看作是Lucene的封装。

二、安装

1、安装JDK

ElasticSearch,简称ES,是使用Lucene作为内部引擎,而Lucene是纯Java语言编写的,因此也是运行在JVM上的。

假设JDK安装包位于/home/test/java目录下,Linux中安装JDK:

  • 安装JDK

以root身份在/usr/下建立java目录:sudo mkdir /usr/java

rpm –ivh /home/test/java/jdk-7u67-linux-i586.rpm (使用该命令进行安装,会安装到/usr/java/目录下)

  • 配置JDK环境变量(需要管理员权限):

sudo vi /etc/profile

#JAVA_HOME

export JAVA_HOME=/usr/java/jdk1.7.0_67

export CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

export PATH=$PATH: $JAVA_HOME/bin

  • 验证安装

java -version

输出Java版本的相关信息,及表示安装成功。

2、下载ElasticSearch

ES下载地址:http://www.elasticsearch.org/download 目前最新版本是:1.4.1

3、安装ElasticSearch

将安装包放于/homg/test/目录下,解压elasticsearch-1.4.1.tar:tar –zxvf /home/test/elasticsearch-1.4.1.tar

4、运行ElasticSearch

解压安装后,在/home/test/elasticsearch-1.4.1/目录下会有三个文件夹:bin、config、lib

运行bin文件夹下的elasticsearch即可将ES系统跑起来:./elasticsearch

5、注意点

最新版的ES需要JDK 1.7及以上

若使用Java API进行操作ES,两者的JDK版本还需一致

三、配置

1、配置文件说明

配置文件位于config目录下,主要有:elasticsearch.yml(ES框架的核心配置)、logging.yml(日志记录相关配置,使用的是log4j进行日志记录)

2、配置项详解

主要解释elasticsearch.yml下各配置项的含义。

################################### 集群###################################
# 集群名称,默认为elasticsearch,在同一网段,具有相同集群名字的节点会自动成为一个集群
#cluster.name: elasticsearch
####################################节点#####################################
# 节点名称,es启动时会自动创建节点名称
#node.name: "Franz Kafka"

# 是否作为主节点,每个节点都可以被配置成为主节点,默认值为true,只有设置为true时,才有可能成为master,最先启动,且该参数设为true的节点会被推选了master
#node.master: true

# 每个节点都可以定义一些与之关联的通用属性,用于后期集群进行碎片分配时的过滤
#node.rack: rack314

# 默认情况下,多个节点可以在同一个安装路径启动,如果你想让你的es只启动一个节点,可以进行如下设置
#node.max_local_storage_nodes: 1

#################################### 索引####################################
# 设置一个索引的分片数量,默认值为5
#index.number_of_shards: 5

# 设置一个索引可被复制的数量,默认值为1
#index.number_of_replicas: 1

# 当你想要禁用公布式时,你可以进行如下设置
#index.number_of_shards: 1
#index.number_of_replicas: 0

# 这两个属性的设置直接影响集群中索引和搜索操作的执行。假设你有足够的机器来持有碎片和复制品,那么可以按如下规则设置这两个值:
# 1) 拥有更多的碎片可以提升索引执行能力,并允许通过机器分发一个大型的索引;
# 2) 拥有更多的复制器能够提升搜索执行能力以及集群能力。
# 对于一个索引来说,number_of_shards只能设置一次,而number_of_replicas可以使用索引更新设置API在任何时候被增加或者减少
#################################### Paths ####################################
#  配置文件所在的位置,即elasticsearch.yml和logging.yml所在的位置
#path.conf: /path/to/conf

# 分配给当前节点的索引数据所在的位置,可以设置多个路径,路径之间用逗号分隔
#path.data: /path/to/data

# 临时文件位置
#path.work: /path/to/work

# 日志文件所在位置
#path.logs: /path/to/logs

# 插件安装位置
#path.plugins: /path/to/plugins

#################################### 插件###################################
# 插件托管位置,若列表中的某一个插件未安装,则节点无法启动
#plugin.mandatory: mapper-attachments,lang-groovy

################################### 内存####################################
#  JVM开始交换时,ElasticSearch表现并不好:你需要保障JVM不进行交换,
# 可以将bootstrap.mlockall设置为true禁止交换
#bootstrap.mlockall: true

##############################网络和HTTP###############################
# 默认情况下,ElasticSearch使用0.0.0.0地址,并为http传输开启9200-9300端口,
# 为节点到节点的通信开启9300-9400端口,也可以自行设置IP地址
#network.bind_host: 192.168.0.1

# 设置其他节点连接此节点的地址,如果不设置的话,则自动获取
#network.publish_host: 192.168.0.1

# 定制该节点与其他节点交互的端口
#transport.tcp.port: 9300

# 节点间交互时,可以设置是否压缩,默认为不压缩
#transport.tcp.compress: true

# Http传输监听定制端口
#http.port: 9200

# 设置内容的最大长度
#http.max_content_length: 100mb

# 禁止HTTP
#http.enabled: false

################################### 网关###################################
# 网关允许在所有集群重启后持有集群状态,集群状态的变更都会被保存下来,
# 当第一次启用集群时,可以从网关中读取到状态,默认网关类型(也是推荐的)是local
#gateway.type: local

# 允许在N个节点启动后恢复过程
#gateway.recover_after_nodes: 1

# 设置初始化恢复过程的超时时间
#gateway.recover_after_time: 5m

# 设置该集群中可存在的节点上限
#gateway.expected_nodes: 2

############################# 恢复设置#############################
# 设置一个节点的并发数量,有两种情况,一种是在初始复苏过程中
#cluster.routing.allocation.node_initial_primaries_recoveries: 4

# 另一种是在添加、删除节点及调整时
#cluster.routing.allocation.node_concurrent_recoveries: 2

# 设置复苏时的吞吐量,默认情况下是 20mb
#indices.recovery.max_bytes_per_sec: 20mb

# 设置从对等节点恢复片段时打开的流的数量上限
#indices.recovery.concurrent_streams: 5
################################## Discovery ##################################
# 设置一个集群中主节点的数量,当多于三个节点时,该值可在2-4之间
#discovery.zen.minimum_master_nodes: 1

# 设置ping其他节点时的超时时间,网络比较慢时可将该值设大
#discovery.zen.ping.timeout: 3s

# 禁止当前节点发现多个集群节点,默认值为false
#discovery.zen.ping.multicast.enabled: false

# 设置新节点被启动时能够发现的主节点列表
#discovery.zen.ping.unicast.hosts: ["host1", "host2:port"]

##################################日志显示##################################

# Shard level query and fetch threshold logging.

#index.search.slowlog.threshold.query.warn: 10s
#index.search.slowlog.threshold.query.info: 5s
#index.search.slowlog.threshold.query.debug: 2s
#index.search.slowlog.threshold.query.trace: 500ms

#index.search.slowlog.threshold.fetch.warn: 1s
#index.search.slowlog.threshold.fetch.info: 800ms
#index.search.slowlog.threshold.fetch.debug: 500ms
#index.search.slowlog.threshold.fetch.trace: 200ms

#index.indexing.slowlog.threshold.index.warn: 10s
#index.indexing.slowlog.threshold.index.info: 5s
#index.indexing.slowlog.threshold.index.debug: 2s
#index.indexing.slowlog.threshold.index.trace: 500ms

##################################垃圾回收日志记录################################

#monitor.jvm.gc.young.warn: 1000ms
#monitor.jvm.gc.young.info: 700ms
#monitor.jvm.gc.young.debug: 400ms

#monitor.jvm.gc.old.warn: 10s
#monitor.jvm.gc.old.info: 5s
#monitor.jvm.gc.old.debug: 2s

################################## 安全################################

# Uncomment if you want to enable JSONP as a valid return transport on the
# http server. With this enabled, it may pose a security risk, so disabling
# it unless you need it is recommended (it is disabled by default).
#http.jsonp.enable: true

四、核心概念

  • 集群

一个集群就是由一个或多个节点组织在一起, 它们共同持有整个的数据,并一起提供索引和搜索功能。一个集群由一个唯一的名字标识,这个名字默认就是“elasticsearch” 。一个节点只能通过指定某个集群的名字,来加入这个集群。

  • 节点

一个节点是集群中的一个服务器,作为集群的一部分,它存储你的数据,参与集群的索引和搜索功能。和集群类似,一个节点也是由一个名字来标识的,默认情况下,这个名字是随机的。这个名字会在启动的时候赋予节点。 这个名字对于管理工作来说挺重要的,因为在这个管理过程中,你会去确定网络中的哪些服务器对应于Elasticsearch 集群中的哪些节点。

在一个集群里,可以拥有任意多个节点。而且,如果当前网络中没有运 行 任 何 Elasticsearch 节 点 , 这 时 启 动 一 个 节 点 , 会 默 认 创 建并 加 入 一 个 叫 做“elasticsearch”的集群.

  • 索引

一个索引就是一个拥有几分相似特征的文档的集合。一个索引由一个名字来标识(必须全部是小写字母的),并且当我们要对对应于这个索引中的文档进行索引、搜索、更新和删除的时候,都要使用到这个名字。类似于数据库db。

  • 类型

在一个索引中,可以定义一种或多种类型。 一个类型是索引的一个逻辑上的分类/分区,其语义完全由你来定。通常,会为具有一组共同字段的文档定义一个类型。类似于数据表table

  • 文档

一个文档是一个可被索引的基础信息单元。比如,你可以拥有某一个客户的文档,某一个产品的一个文档,当然,也可以拥有某个订单的一个文档。文档以 JSON(Javascript Object Notation)格式来表示,在一个 index/type 里面,可以存储任意多的文档。注意,尽管一个文档,物理上存在于一个索引之中,文档必须被索引/赋予一个索引的 type。类似于一行记录。

  • 切片和复制

一个索引可以存储超出单个结点硬件限制的大量数据。比如,一个具有 10 亿文档的索引占据 1TB 的磁盘空间,而任一节点都没有这样大的磁盘空间;或者单个节点处理搜索请求,响应太慢。为了解决这个问题,Elasticsearch 提供了将索引划分成多份的能力,这些份就叫做分片。当你创建一个索引的时候,你可以指定你想要的分片的数量。每个分片本身也是一个功能完善并且独立的“索引” ,这个“索引”可以被放置到集群中的任何节点上。

  • 总结--与关系型数据库的对比
关系数据库     ⇒ 数据库 ⇒ 表    ⇒ 行    ⇒ 列(Columns)
Elasticsearch ⇒ 索引 ⇒ 类型 ⇒ 文档 ⇒ 字段(Fields)

五、相关资料链接

http://www.elasticsearch.org/guide/en/elasticsearch/

http://www.elasticsearch.cn/

http://learnes.net/getting_started/installing_es.html

ElasticSearch学习笔记-01 简介、安装、配置与核心概念的更多相关文章

  1. PHP学习笔记----IIS7下安装配置php环境

    原文:PHP学习笔记----IIS7下安装配置php环境 Php如何安装 Php版本的选择 Php在windows下的(php5.4.7)有两种版本: VC9 x86 Non Thread Safe ...

  2. [学习笔记]Ubuntu下安装配置SQLSERVER2017

    摘要自微软官网: https://docs.microsoft.com/zh-cn/sql/linux/quickstart-install-connect-ubuntu 安装步骤: 1. 导入公共秘 ...

  3. Java学习笔记——Linux下安装配置tomcat

    朝辞白帝彩云间,千里江陵一日还. 两岸猿声啼不住,轻舟已过万重山. ——早发白帝城 首先需要安装配置JDK,这里简单回顾下.Linux下用root身份在/opt/文件夹下创建jvm文件夹,然后使用ta ...

  4. appium学习笔记(环境安装配置,设备启动)

      Android SDK下载及配置 下载地址 下载后解压缩,打开SDK Manager.exe,下载适当版本的Android包 配置环境变量:目录下的tools路径(含uiautomatorview ...

  5. MongoDB学习笔记-01 简介、安装

    MongoDB简介 MongoDB是一种强大.灵活.可拓展的存储方式.是一个面向文档(相当于"行"的概念)的数据库. 可拓展:通过添加服务器而增加存储量. Windows下安装 版 ...

  6. Machine Learning 学习笔记 01 Typora、配置OSS、导论

    Typora 安装与使用. Typora插件. OSS图床配置. 机器学习导论. 机器学习的基本思路. 机器学习实操的7个步骤

  7. ELK学习笔记之Kibana安装配置

    Kibana 是一个开源的分析和可视化平台,是ELK的重要部分.Kibana提供搜索.查看和与存储在 Elasticsearch 索引中的数据进行交互的功能.开发者或运维人员可以轻松地执行高级数据分析 ...

  8. php学习笔记之wamp安装配置

    一.下载apache.php.mariadb apache 下载地址:http://www.apachehaus.com/cgi-bin/download.plx VC9版本分为:32位版.64位版. ...

  9. Java学习笔记——Linux下安装配置MySQL

    山重水复疑无路,柳暗花明又一村 --游山西村 系统:Ubuntu 16.04LTS 1\官网下载mysql-5.7.18-linux-glibc2.5-x86_64.tar.gz2\建立工作组:$su ...

随机推荐

  1. 七、context command

    context command是用来新建自己的工具,可以调用OPENGL,获取鼠标操作函数,在view窗口画自己想画的东西.(我是这麽理解的,可以以后再确定一下) 下面是一个context comma ...

  2. PHP的命名空间

    简介: 防止名称冲突. 原理: 类似文件目录/usr/local这样的. 用法: namespace:定义命名空间: use:取别名: 代码示例:file 1.php <?php namespa ...

  3. Android ImageView显示本地图片

    Android ImageView 显示本地图片 布局文件 <?xml version="1.0" encoding="utf-8"?> <R ...

  4. 苹果刷机相关开源代码(如iRecovery等)收集汇总(不断更新中...)

    下面截图是在下面开源代码下使用VS2015修改部分代码后适配而成,可以在Windows平台上运行, 下载连接: http://pan.baidu.com/s/1i4zKGx3.

  5. mysql的时间转化

    1.1 获得当前日期+时间(date + time)函数:now() 除了 now() 函数能获得当前的日期时间外,MySQL 中还有下面的函数: current_timestamp()   curr ...

  6. java中的类型比较

    Java 里的既可以比较基本类型也可以比较引用类型. 对于基本类型,Java 的==比较值比较 对于引用类型,Java 的==比较了引用的是否为同一个对象(比较内存地址), 也就是说这两个变量是否都指 ...

  7. jstl <c:forEach> 介绍

    varStatus是<c:forEach>jstl循环标签的一个属性,varStatus属性.就拿varStatus="status"来说,事实上定义了一个status ...

  8. uniq,sort,

    语 法:uniq [-cdu][-f<栏位>][-s<字符位置>][-w<字符位置>][--help][--version][输入文件][输出文件]   补充说明: ...

  9. XidianOJ 1120 Gold of Orz Pandas

    题目描述 Orz Panda is addicted to one RPG game. To make his character stronger, he have to fulfil tasks ...

  10. Binary Tree Maximum Path Sum

    Given a binary tree, find the maximum path sum. The path may start and end at any node in the tree. ...