博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
深入理解ElasticSearch—ES简介
阅读量:4095 次
发布时间:2019-05-25

本文共 2458 字,大约阅读时间需要 8 分钟。

一、ElasticSearch简介

     因为ES使用开源全文检索库进行索引和搜索,所以我们先来了解下Apache Lucene。

1、Apache Lucene简介

1)Lucene的总体架构

  • 文档(document):索引与搜索的主要数据载体,它包含一个或多个字段,存放将要写入索引或从索引搜索出来的数据。
  • 字段(field):文档的一个片段,它包括两个部分,字段的名称和内容。
  • 词项(term):搜索时的一个单位,代表文本中的某个词。
  • 词条(token):词项在字段中的一次出现,包括词项的文本、开始和结束的唯一以及类型。

        Apache Lucene将写入索引的信息组织成一种名为倒排索引(inverted index)的结构。该结构是一种将词项映射到文档的数据结构。

2)分析数据

       分析器包括分词器(tokenizer)、过滤器(filter)和字段映射器(character mapper)。查询时,前缀查询(prefix_query)不会被分析,而匹配查询(match_query)则会被分析。

3)Lucene查询语言

       ES提供的一些查询类型(query type)支持Apache Lucene的查询解析语法。在Lucene中,一个查询通常被分割为词项和操作符。lucene中的词项可以是单个词,亦可以是短语。如果设置了查询分析过程,那么预先选定的分词器将会对查询中的所有词项进行处理。

       查询可以包含布尔操作符,用于连接多个词项,使之构成从句(clause)。如:elasticsearch AND (matering OR book)。

       在字段中查询:title :elasticsearch (查询所有在title字段中包含词项elasticsearch的文档)、title:(+elasticsearch  +"mastering book");+title:elasticsearch  +title:"mastering book"或(查询所有在title中包含词项和短语的文档)

       词项修饰符:Lucene允许用户使用修饰符(modifier)修改传入查询对象的词项。最常见的修饰符是通配符(wildcard)。Lucene支持两种通配符:?和*。前者匹配任意一个字符,后者匹配多个字符。

       除通配符外,Lucene还支持模糊查询,通过使用~以及一个紧随其后的整数值。当使用该修饰符修饰一个词项时,意味着我们想要搜索那些包含该词项近似词项的文档。~后的整数值确定了近似词项与原始词项的最大编辑距离。

       可以使用^字符并赋予一个浮点数对词项加权(boosting),以提高该词项的重要程度,默认情况下词项权重为1。

       特殊字符处理,+、-、!等需要使用\进行转义。

2、ES简介

1) ES的基本概念

  • 索引:es将它存储的数据存在一个或多个索引中。索引好比数据库。ES索引可以由一个或多个lucene索引构成。其有es的分片、复制机制及其配置决定。
  • 文档:跟Lucene类似,es文档最终存储为Lucene文档。
  • 映射:一个映射定义了字段类型,每个字段的数据类型,以及字段被Elasticsearch处理的方式。映射还用于设置关联到类型上的元数据。
  • 类型:es每个文档都有与之对应的类型定义,这允许在一个索引中存储多个文档内容,并为不同的文档提供不同的映射。高版本的es将逐渐取消多个类型。
  • 节点:单个es服务实例。
  • 集群:多个es节点组成。
  • 分片:集群允许系统存储的数据总量超过单击容量,为了满足该需求,es将数据散布到多个物理Lucene索引上。这些lucene 索引称为分配,而散布这些分片的过程叫作分片处理。
  • 副本:解决了访问压力过大时单机无法处理所有请求的问题。
  • 网关:在ES的工作过程中,关于集群状态,索引设置的各种信息都会被收集起来,并在网关中被持久化。

2)ES架构背后的关键概念

  • 合理的默认配置。使得用户安装以后可以直接使用,而不需要进行任何设置。
  • 默认分布式工作模式。
  • 对等架构(P2P)可以避免单点故障(SPOF)。
  • 易于向集群扩充新节点。
  • ES没有对索引的数据结构强加任何限制,从而允许用户调整现有的数据模型。
  • 准实时(Near Real Time,NRT)搜索和版本同步。

3)ES的工作流程

启动过程

        当ES节点启动时,它使用广播技术(可配置为单播)来发现同一集群中的其他节点并与他们连接。

        集群中会有一个节点被选为管理节点(master node)。该节点负责集群的状态管理一级集群拓扑变化时作出反应,分发索引分片至相应的节点。

故障检测

        集群正常工作时,管理节点会监控所有的可用节点,检查他们是否正在工作。如果任何节点在预定义时间内没有响应,则认为该节点已经断开,然后开始启动错误处理过程。为了描述故障检测(failure detection)是如何工作的,我们用一个只有三个节点的集群为例,即包含一个管理节点,两个数据节点。管理节点会发送ping请求至其他节点,然后等待响应。如果没有响应,则将该节点从集群中删除,如图:

与ES通信

        ES对外公开了一个精巧的API,这个API是基于REST的,并在实践中能轻松整合到任何支持HTTP协议的系统中去。值得一提的是,ES在内部也使用Java API进行节点间的通信。

索引数据

        ES提供了四种方式来创建索引。最简单的方式是使用索引API,它允许用户发送一个文档至特定的索引。第二种或第三种方式允许用户通过bulk API或UDP bulk API来一次性发送多个文档至集群。两者的区别在于网络连接方式,前者使用HTTP协议,后者使用UDP协议,且后者速度更快但不可靠。第四种方式使用插件发送数据,称为河流(river),河流允许在ES节点上,能够从外部系统获取数据。

       另外,建索引操作只会发生在主分片上,而不是副本上。当一个索引请求发送到某节点时,如果该节点没有对应的主分片或者副本,那么这个请求会被转发到拥有正确主分片的节点。

 

 

 

 

 

 

 

 

 

     

转载地址:http://gylii.baihongyu.com/

你可能感兴趣的文章
【UGUI/NGUI】一键换Text/Label字体
查看>>
【C#】身份证本地验证
查看>>
【Unity】坑爹的Bug
查看>>
【算法】求数组中某两个数的和为目标值
查看>>
如何高效学习动态规划?
查看>>
动态规划法(六)鸡蛋掉落问题(一)
查看>>
LeetCode 887.鸡蛋掉落(C++)
查看>>
奇异值分解(SVD)的原理详解及推导
查看>>
算法数据结构 思维导图学习系列(1)- 数据结构 8种数据结构 数组(Array)链表(Linked List)队列(Queue)栈(Stack)树(Tree)散列表(Hash)堆(Heap)图
查看>>
求LCA最近公共祖先的离线Tarjan算法_C++
查看>>
Leetcode 834. 树中距离之和 C++
查看>>
【机器学习】机器学习系统SysML 阅读表
查看>>
最小费用最大流 修改的dijkstra + Ford-Fulksonff算法
查看>>
最小费用流 Bellman-Ford与Dijkstra 模板
查看>>
实现高性能纠删码引擎 | 纠删码技术详解(下)
查看>>
scala(1)----windows环境下安装scala以及idea开发环境下配置scala
查看>>
zookeeper(3)---zookeeper API的简单使用(增删改查操作)
查看>>
zookeeper(4)---监听器Watcher
查看>>
zookeeper(2)---shell操作
查看>>
mapReduce(3)---入门示例WordCount
查看>>