作者:紫藤雨2502915477 | 来源:互联网 | 2023-05-29 13:55
什么是全文搜索引擎
全文搜索引擎是目前广泛应用的主流搜索引擎。
它的工作原理是计算机索引程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方式。
这个过程类似于通过字典中的检索字表查字的过程。
什么时候使用全文搜索引擎
为什么使用ES
ES(ElasticSearch) 作为一个开源的高扩展的分布式全文检索引擎,自2016年起已经超过Solr,成为排名第一的搜索引擎应用,具有很多独特的优点。
ES可以为几乎所有类型的数据提供近实时的索引、搜索和分析服务。无论是结构化或非结构化数据文本、数值数据和地理空间数据,ES都支持高效地存储和索引,并提供高效搜索。
ES扩展性好。它可以扩展到上百台服务器,处理PB级别的数据,同时索引的副本机制保障了高可用的特点。
ES使用简单。它通过简单的 RESTful API 隐藏了 Lucene 的复杂性,从而让全文搜索变得简单易用。
例如,要计算出2.38亿会员中有多少80后的已婚的上海男士。
传统数据库执行时间:5个小时左右
ES执行时间:1分钟
ES vs Solr
ES 和 Solr 都是基于 Lucene 的全文搜索引擎,他们的特征差异对比如下:
ElasticSearch 应用
Github:2013年初,抛弃了Solr,采取 ElasticSearch 来做PB 级的搜索。“GitHub 使用ElasticSearch搜索20TB 的数据,包括13亿文件和1300亿行代码”。
维基百科:启动以ElasticSearch为基础的核心搜索架构
SoundCloud:“SoundCloud 使用ElasticSearch 为1.8亿用户提供准时而精准的音乐搜索服务。
百度:目前广泛使用ElasticSearch作为文本数据分析,采集百度所有服务器上的各类指标数据及用户自定义数据,通过对各种数据进行多维分析展示,辅助定位分析实例异常或业务层面异常。目前覆盖百度内部20多个业务线(包括云分析、网盟、预测、文库、直达号、钱包、风控等),单集群最大100台机器,200个ES节点,每天导入30TB+数据。
新浪:使用ElasticSearch 分析处理32亿条实时日志。
阿里:使用ElasticSearch 构建日志采集和分析体系。
Stack Overflow:解决Bug 问题的网站,全英文,编程人员交流的网站。
ES基本术语
结构化数据
也称作行数据,是由二维表结构来逻辑表达和实现的数据,严格地遵循数据格式与长度规范,主要通过关系型数据库进行存储和管理。
对于结构化数据,因为它们具有特定的结构,所以我们一般都是可以通过关系型数据库(MySQL、Oracle等)的二维表(Table)的方式存储和搜索,也可以建立索引。
非结构化数据
又可称为全文数据,不定长或无固定格式,不适于由数据库二维表来表现,包括所有格式的办公文档、Word文档、邮件、音视频信息等。
对于非结构化数据,主要有两种搜索方式:顺序扫描和全文检索。
顺序扫描
按照顺序扫描的方式查特定的关键字。
全文检索
将非结构化数据中的一部分信息提取出来,重新组织,使其变得有一定结构,然后对此有一定结构的数据进行搜索,进而达到搜索相对较快的目的。
这种方式就构成了全文检索的基本思路。这部分从非结构化数据中提取出的重新组织的信息,我们称之为索引。
这种检索方式主要工作量在前期索引的创建。
近实时
ElasticSearch是近实时的查询。通常情况下,从索引文档到可搜索延迟在1s,可配置。
集群 cluster | 一个集群由一个或多个 节点组成。
ES的分布式架构中,不同集群是通过不同名字前来区分的,默认名字为"elasticsearch",可以在配置文件中修改。 |
节点 node | 节点是属于集群的 运行实例。
在启动时,节点将使用 单播 来发现具有相同集群名称的现有集群,并将尝试加入该集群。
一个节点只能加入一个集群。 |
索引 Index | 索引是相似文档结构的集合。 |
Shard 分片 | 日常场景中,索引存储的数据可能超过单个节点的硬件限制,或者从单个节点搜索请求太慢。为了解决这个问题,ES提供将索引分成多个分片的功能。
一个ElasticSearch的Shard本质上是一个Lucene Index。 |
Primary Shard 主分片 | 主分片主要用以解决 水平扩展 问题,通过主分片,就可以将数据分布到集群上的所有节点,一个主分片就是一个运行的Lucene实例。
主分片数在索引创建时指定,后续不允许修改,除非使用Reindex进行修改。 |
Replica Shard 副分片 | 副本分片用以解决 数据高可用 的问题,也就是说集群中有节点出现硬件故障的时候,通过副本的方式,可以保障数据不会产生真正的丢失,因为副本分片是主分片的拷贝。
同时副本也会提高查询性能,增大吞吐量,搜索可以并行在所有副本上执行。
在索引中副本分片数量可动态调整,通过增加副本数,可以在一定程度上提高服务查询的性能。 |
映射 Mapping | 映射用于定义ES对索引中字段的存储类型、分词方式等信息,类似数据库中的Schema。 |
文档 Document | ES是面向文档的,文档是所有可搜索数据的最小单位。
文档可以理解为关系型数据库中的一条记录。在ES中文档会被序列化成JSON格式,每一个文档有一个Unique ID,可以自己指定ID或者由ES自动生成。 |
主键 Id | 每个文档都会有不同的Id,没有指定的话,会自动生成 |
字段 Field | 一个 document 包含字段或键值对的列表。字段类似于关系数据库中表中的列。 |
关系型数据库 类比 ElasticSearch
RDBMS | ElasticSearch |
Table | Index |
Row | Document |
Column | Field |
Schema | Mapping |
SQL | DSL |
SELECT * FROM table… | GET http://… |
UPDATE table SET… | PUT http://… |