• ElasticSearch学习笔记-01 简介、安装、配置与核心概念


    一、简介

    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

     

     

     

     

     

     

    只是为了传播知识,侵犯到您的权益,请与1366678737@qq.com联系
  • 相关阅读:
    杀掉MYSQL死锁进程
    成都项目中因为MYSQL与SSDB备分时间不一致,导致主键产生器错误解决一例
    Jenkins Robot framework 持续集成环境搭建
    robot framework环境搭建
    借助autoit操作上传下载对话框(参数化)
    无线热点登陆认证原理探究---captive portal
    nodejs while-loop
    nodejs 模板字符串
    [Node.js] 關於 console.log 的格式化輸出
    nightwatch testing 注意事项
  • 原文地址:https://www.cnblogs.com/Jxwz/p/4147425.html
Copyright © 2020-2023  润新知