欢迎光临散文网 会员登陆 & 注册

【建议收藏】全文搜索引擎ElasticSearch

2021-05-18 16:00 作者:编程大战  | 我要投稿

    迄今为止很多家公司都在使用 Elasticsearch,在互联网公司员工对于ES讨论的问题必然不会缺少,例如说:把数据放在引擎,从引擎取出数据等等

    如果没有了解过搜索引擎的同学,根本听不同他们在说些什么,在这里UP带领你们来了解一下“全文搜索引擎ElasticSearch”这个引擎

    引擎一词,一般指收搜索引擎,而搜索引擎现在用的比较多的就是:ElasticSearch,那ElasticSearch同学你们又了解多少呢?


一、 Elasticsearch简介

    Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式的全文搜索引擎,其对外服务是基于RESTful web接口发布的。

    Elasticsearch是用Java开发的应用,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到近实时搜索,稳定,可靠,快速,安装使用方便。

Elasticsearch有两大功能,这两个主要功能:.

搜索:功能和Solr类似。

分析:结合LogStash使用。

二、Elasticsearch相关核心概念

1 cluster

集群。Elasticsearch集群由一或多个节点组成,其中有一个主节点,这个主节点是可以通过选举产生的,主从节点是对于集群内部来说的。Elasticsearch的一个概念就是去中心化,字面上理解就是无中心节点,这是对于集群外部来说的,因为从外部看Elasticsearch集群,在逻辑上是个整体,你与集群中的任何一个节点通信和与整个Elasticsearch集群通信是等价的。也就是说,主节点的存在不会产生单点安全隐患、并发访问瓶颈等问题。

2 shards

primary shard:代表索引的主分片,Elasticsearch可以把一个完整的索引分成多个primary shard,这样的好处是可以把一个大的索引拆分成多个分片,分布存储在不同的Elasticsearch节点上,从而形成分布式存储,并为搜索访问提供分布式服务,提高并发处理能。primary shard的数量只能在索引创建时指定,并且索引创建后不能再更改primary shard数量。

3 replicas

replica shard:代表索引主分片的副本,Elasticsearch可以设置多个replica shard。replica shard的作用:

一是提高系统的容错性,当某个节点某个primary shard损坏或丢失时可以从副本中恢复。

二是提高Elasticsearch的查询效率,Elasticsearch会自动对搜索请求进行负载均衡,将并发的搜索请求发送给合适的节点,增强并发处理能力。

4 Index

索引。相当于关系型数据库中的表。其中存储若干相似结构的Document数据。如:客户索引,订单索引,商品索引等。Elasticsearch中的索引不像数据库表格一样有强制的数据结构约束,在理论上,可以存储任意结构的数据。但了为更好的为业务提供搜索数据支撑,还是要设计合适的索引体系来存储不同的数据。

5 Type

类型。每个索引中都必须有唯一的一个Type,Type是Index中的一个逻辑分类。Elasticsearch中的数据Document是存储在索引下的Type中的。

注意:Elasticsearch5.x及更低版本中,一个Index中可以有多个Type。Elasticsearch6.x版本之后,type概念被弱化,一个index中只能有唯一的一个type。且在7.x版本之后,删除type定义。

6 Document

文档。Elasticsearch中的最小数据单元。一个Document就是一条数据,一般使用JSON数据结构表示。每个Index下的Type中都可以存储多个Document。一个Document中可定义多个field,field就是数据字段。如:学生数据({"name":"张三", "age":20, "gender":"男"})。

7 元数据

在Elasticsearch中所有以“_”开头的属性都成为元数据,都有着自己特定的含义。

例如:_index:表示索引

8 倒排索引|反向索引

对数据进行分析,抽取出数据中的词条,以词条作为key,对应数据的存储位置作为value,实现索引的存储。这种索引称为倒排索引。倒排索引是Document写入Elasticsearch时分析维护的。

三、Elasticsearch常见使用场景-平台

维基百科:全文检索,高亮显示,搜索推荐

The Guardian(国外的一个新闻网站),此平台可以对用户的行为(点击、浏览、收藏、评论)、社区网络数据(对新闻的评论等)进行数据分析,为新闻的发布者提供相关的公众反馈。

Stack Overflow(国外的程序异常讨论论坛)

Github(开源代码管理),在千亿级别的代码行中搜索信息

电子商务平台等。


四、Elasticsearch架构图

架构图介绍:

  • Gateway代表ElasticSearch索引的持久化存储方式。在Gateway中,ElasticSearch默认先把索引存储在内存中,然后当内存满的时候,再持久化到Gateway里。当ES集群关闭或重启的时候,它就会从Gateway里去读取索引数据。比如LocalFileSystem和HDFS、AS3等。

  • DistributedLucene Directory,它是Lucene里的一些列索引文件组成的目录。它负责管理这些索引文件。包括数据的读取、写入,以及索引的添加和合并等。

  • River,代表是数据源。是以插件的形式存在于ElasticSearch中。 

  • Mapping,映射的意思,非常类似于静态语言中的数据类型。比如我们声明一个int类型的变量,那以后这个变量只能存储int类型的数据。比如我们声明一个double类型的mapping字段,则只能存储double类型的数据。Mapping不仅是告诉ElasticSearch,哪个字段是哪种类型。还能告诉ElasticSearch如何来索引数据,以及数据是否被索引到等。

  • Index Moudle,Elasticsearch里的索引概念是名词而不是动词,在elasticsearch里它支持多个索引。优点类似于关系数据库里面每一个服务器可以支持多个数据库是一个道理,在每一索引下面又可以支持多种类型,这又类似于关系数据库里面的一个数据库可以有多张表一样。但是本质上和关系数据库还是有很大的区别,我们这里暂时可以这么理解

  • Search Module,搜索查询模块。

  • Disvcovery,主要是负责集群的master节点发现。比如某个节点突然离开或进来的情况,进行一个分片重新分片等。这里有个发现机制。发现机制默认的实现方式是单播和多播的形式,即Zen,同时也支持点对点的实现。另外一种是以插件的形式,即EC2。

  • Scripting,即脚本语言。包括很多,这里不多赘述。如mvel、js、python等。

  • Transport,代表ElasticSearch内部节点,代表跟集群的客户端交互。包括Thrift、Memcached、Http等协议

  • RESTful Style API,通过RESTful方式来实现API编程。

  • 3rd plugins,代表第三方插件。

  • Java(Netty),是开发框架。

  • JMX,是监控。

最后想要学习Elasticsearch的同学可以观看UP主上传的视频哦,链接如下:

喜欢UP主视频的,点赞关注收藏一哦~


【建议收藏】全文搜索引擎ElasticSearch的评论 (共 条)

分享到微博请遵守国家法律