zoukankan      html  css  js  c++  java
  • Elasticsearch实战一

    一、简介

    Elasticsearch是一个分布式可扩展近实时的高性能搜索和数据分析引擎。基于Java编写,其内部使用Lucene作为索引和搜索。

    Elasticsearch提供了搜集、分析、存储数据三大功能,其主要特点有:分布式、零配置、易装易用、自动发现、索引自动分片索引副本机制、RESTful风格接口、多数据源和自动搜索负载等。

    Lucene是一个免费、开源、高性能、纯Java编写的全文检索引擎。主要模块有Analysis模块、Index模块、Store模块、QueryParser模块、Search模块和Similarity模块。

    1、数据搜索方式

    数据类型有两种类型,即结构化数据和非结构化数据。与数据类型相对应,数据的搜索分为两种,即结构化数据搜索和非结构化数据搜索。

    因为结构化数据可以基于关系型数据库存储(支持索引),通过关系型数据进行检索。

    非结构化数据主要有顺序扫描(效率低)和全文检索两种方式。

    2、搜索引擎工作原理

    图来自《Elasticsearch实战与原理分析》

    数据索引过程先后经历正向索引和倒排索引阶段,最终建立索引库。

    3、理解倒排索引

    正排索引:以网页或文章映射关系为Key、以分词的列表为Value。 

     

    倒排索引:以分词为Key、以网页或文章映射关系为Value。

    二、环境搭建

    1、下载与启动

    版本:elasticsearch-7.2.0-windows-x86_64.zip

    启动使用解压后压缩包中有自带的jdk11,修改bin/elasticsearch-env.bat中JAVA_HOME配置。 

    if defined JAVA_HOME (
      rem set JAVA="%JAVA_HOME%injava.exe"
      set JAVA="%ES_HOME%jdkinjava.exe"
    ) else (
      set JAVA="%ES_HOME%jdkinjava.exe"
      set JAVA_HOME="%ES_HOME%jdk"
    )

     解压后目录:

    查看帮助命令:-d后台启动

    浏览器验证:

    http://localhost:9200/

     2、核心概念

    Elasticsearch的核心概念有Node、Cluster、Shards、Replicas、Index、Type、Document、Settings、Mapping和Analyzer。

    (1)Node:即节点,组成集群的基本服务单元,节点类型有两种:master(主)节点和data(数据)节点。

    (2)Cluster:即集群,同一个集群内节点的名字不能重复,但是集群名称一定要相同。集群中节点状态有三种:Green(健康)、Yellow(预警)、Red(无法使用)。

    (3)Shards:即分片(分布式存储)。集群默认为一个索引创建5个主分片,并且为每个主分片创建一个副本。

    (4)Replicas:即副本(高可用性)。

    (5)Index:即索引。

    (6)Type:即类别。

    (7)Document:即文档。

    (8)Settings:索引的定义信息,包含分片、副本等。

    (9)Mapping:索引字段(Field)的存储类型、分词方法、是否存储等信息。

    (10)Analyzer:表示字段分词方式的定义。

    三、Elasticsearch的架构设计

     1、节点自动发现机制

    Elasticsearch内嵌自动发现功能,主要提供了4种可供选择的发现机制。其中一种是默认实现,其他都是通过插件实现的,具体如下:

    (1)Azure discovery插件方式:多播模式。

    (2)EC2 discovery插件方式:多播模式。

    (3)Google Compute Engine(GCE)discovery插件方式:多播模式。

    (4)Zen discovery:默认实现方式,支持单播模式和多播模式(不推荐:大多数操作系统不支持,安全性不高)。 

    集群构建及主节点选举过程:

    (1)节点启动后先执行ping命令(RPC命令),discovery.zen.ping.unicast.hosts配置中ip。ping命令返回结果包含该节点的基本信息及该节点认为的主节点。

    (2)选举开始是,主节点现充各节点认为的master节点中选。规则表简单,即按照节点ID(不知道是什么,感觉应该是节点名称)的字典顺序排序,取第一个。

    注意:集群主节点存在最小值限制条件,discovery.zen.ping.minimum_master控制。未达到数量要求,循环上述(2)步骤。

    2、分片和路由

    对文档的新建、索引和删除请求等操作,必须在主分片上完成之后才能被复制到相关的副本分配。

    索引数据路由到分片算法:shard_num=hash(routing) % num_primary_shards

    routing字段的取值默认是id字段或者parent字段。

    3、数据写入过程

     图来自《ELK Stack权威指南》

    (1)内存和translog

    写入数据生成倒排索引segment(分段),进入内存buffer;

    同时记录translog文件。()

    (2)磁盘缓存

    内存buffer生成新的segment分段,刷到文件系统缓存中(默认设置为1秒间隔,也提供_refresh接口)。

    (3)分段存储

    segment(分段)写入磁盘,commit文件更新记录;清空translog文件(默认设置:30分钟或当translog文件大于512M,也提供_flush接口)。

    4、分段合并

     

  • 相关阅读:
    Linux_搭建NFS服务(基础)
    Linux_配置主DNS服务(基础)
    Linux_配置辅助DNS服务(基础)
    Linux_配置本地YUM源(RHEL8)
    9. Mybatis plugins标签 实现分页
    27. SpringBoot 切换内嵌Servlet容器
    8. Mybatis typeHandlers标签
    63. VUEX Getters基本使用
    62. State单一状态树概念
    61 . VUEX state 和 mutations
  • 原文地址:https://www.cnblogs.com/wangymd/p/13359932.html
Copyright © 2011-2022 走看看