当前位置:主页 > 查看内容

ES小结【帅哥必看篇】

发布时间:2021-06-25 00:00| 位朋友查看

简介:ElasticSearch总结 ES介绍 ES核心组成 ES的集群 ES介绍 1什么是ES a. ES是基于Apache Lucene的开源搜索引擎Lucene是搜索引擎库由Shay Banon最早创立。这家伙为了他老婆才设计的) b. ES使用java开发并使用Lucene作为核心来实现索引和搜索功能它是通 过RESTful……

ElasticSearch总结

ES介绍

1)什么是ES?
a. ES是基于Apache Lucene的开源搜索引擎,Lucene是搜索引擎库,由Shay Banon最早创立。(这家伙为了他老婆才设计的)
b. ES使用java开发并使用Lucene作为核心来实现索引和搜索功能,它是通 过RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得简单。

2)为什么要用ES,它的优点是什么?
why:在搜索过程中,MySQL主要用于主键搜索查询。而随着业务量的需 求,我们同时需要大量的全文搜索。全文搜索需要匹配大量的文本,用 MySQL的like模糊查询将导致性能下滑。而ES全文搜索引擎就能保证大本 文的匹配查询性能。

优点:

  • 分布式功能,数据高可用,集群高可用
  • 支持PB级别的数据
  • 基于Lucene,提供简单的API
  • 支持多语言
  • 完成搜索的功能和分析功能

3)ES原理

  • ES主要运用了倒排索引,根据文章中的关键字建立搜索
  • ES在Lucene的基础上进行封装,实现了分布式搜索引擎
  • ES中的索引,类型,文档概念类似于MySQL中的数据库,表,行
  • ES也是Master-slave构架,实现了数据的分片和备份
    ?

ES核心组成

1)ES基本组件
ES主要是由,索引,类型,文档和字段组成的,类似于数据库

索引:ES中可以包含多个索引,每个索引可以包含多个类型,每一个类型包多个文档,每个文档包含多个字段
类型:用来定义数据机构,相当于表结构的描述,描述每个字段的类型. 主要用于mapping中,mapping在es中相当于sql中的创建schema
文档:ES里面最小的数据单元,好比一条数据。可以对文档进行索引,搜索,排序,过滤。ES使用JSON作为文档序列化格式
字段:数据库中列的概念,一个document可以有一个或多个field

例子:Get /megacorp/employee/1
在这里插入图片描述

2)倒排索引
– ES使用的是倒排索引的结构,采用Lucene倒排索引作为底层。一个索引由文档中所有不重复的列表构成。对于每一个词,都有一个包含它的文档列表。
– 为了创建倒排索引,首先将每个文档拆分成独立的词,然后创建一个包含所有不重复词条的排序列表,然后列出每个出现在哪个文档。
Eg.
String1: “study every day, good good up to forever ”
String2: “To forever, study every day, good good up”
在这里插入图片描述
我们能看见doc1和doc2都出现了以上的关键词,所以ES会把doc1和doc2找出来。但是doc1的匹配率更高,在显示时会先把doc1展示在前面。
?

3)分析器(analysis)
分析器是三个顺序执行的组件的组合(字符过滤器,分词器,表征过滤器)

字符过滤器:让字符在被分词前变得更整洁。比如说html_strip字符过滤器,可以用来删除所有HTML标签,并将HTML实体类转换成相应的Unicode字符,eg. á 转换成A

分词器:一个分析器必须包含一个分词器。分词器将字符串分割成单独的词(terms)或者表征(token). 比如说standard分词器会将字符串分割成单独的字词,删除大部分标点符号;比如说whitespace分词器,通过空格来分割文本

表征过滤器:分词结果的表征流会根据各自情况,传递给特定的表征过滤器。
表征过滤器可能修改,添加,或者删除表征。比如说lowercase表征过滤器,会将所有表征转换成小写;比如说stop表征过滤器,会删除所有可能会造成搜索歧义的停用词,比如a,the,and,is

自定义分析器:
在这里插入图片描述
在配置好stadard分词器,lowercase表征过滤器,stop表征过滤器后,
在这里插入图片描述
此外,除非我们告诉ES在哪里使用,否则分析器不会作用,所以我们要通过映射将它应用在一个string类型的字段上。
在这里插入图片描述
由于分析器不是全局的,在创建索引后,用analyze API来测试新的分析器。在这里插入图片描述
4)排序(analysis)
默认情况下,结果会按照相关性进行排序。在ES的查询结果中,相关性分值会用_score字段来给出一个浮点的数值,结果集以_score进行倒序排列。
所谓相关性,即

  • 检索词频率 -> 词出现的次数
  • 反向文档频率 -> 检索词在当前文档出现的次数与索引中其它文档的出现总数的比率
  • 字段长度准册 -> 内容越长,数值越小

?

ES的集群

1)集群构架
ES是分布式的集群,每一个节点其实就是Lucene。当用户搜索的时候,会随机挑选一台,然后这太机器自己知道数据在哪。
在ES中,默认clustername的值是ElasticSearch。由于一台服务器无法储存大量数据,ES把一个index里面的数据,分为多个shard,分布式地储存在各个服务器上面。
总而言之,一个集群至少有一个节点,每一个节点就是ES进程,节点可以有多个索引默认的。如果创建索引,那么索引将会有五个分片(primary shard, 主分片)构成的,每一个分片会有一个副本(replica shard,复制分片)
在这里插入图片描述
上图是一个3个节点的集群,可以看到主分片和对应的复制分片都不在同一个节点内。这样有利于某个节点挂掉了,数据也不会丢失。(类似hdfs思想)
?
2)ES的分布式原理
– 将文档分区到不同的容器或者分片(shards)中,它们可以存在于一个或者多个节点中
– 将分片均匀的分配到各个节点,对索引和搜索做负载均衡
– 沉余每一个分片,防止硬件故障造成的数据丢失
– 将集群任意一个节点上的请求路由到相应数据所在的节点
– 无论是增加节点,还是移除节点,分片都可以做到无缝的扩展和迁移
?
3)ES设计构架
在这里插入图片描述

  1. 启动ES的服务,初始化restHighLevelClient并查看是否已经建有索引。如果没有,就通过自定义的mapping创建索引。
  2. 业务系统通过增加,更新或者删除信息,把信息储存到数据库中
  3. 将流式数据和全量数据通过数据转换储存到ES集群中
  4. 通过调用API调用查询信息,并返回给业务系统
;原文链接:https://blog.csdn.net/weixin_40489833/article/details/115679564
本站部分内容转载于网络,版权归原作者所有,转载之目的在于传播更多优秀技术内容,如有侵权请联系QQ/微信:153890879删除,谢谢!

推荐图文


随机推荐