一、搜索引擎
搜索引擎的核心目的是帮助用户以最小的成本才海量数据中找到最想要的结果。糟糕的搜索引擎往往会所问非所答,用户查了半天也得不到自己想要的,好的搜索引擎往往第一页就是用户最想要的结果。而目前判断搜索引擎好坏一般是从召回率、精确率两个指标来衡量搜索质量:
css
代码解读
复制代码
召回率 = B / (A + B) 精确率 = B / (B + D)
一、elasticSearch诞生
lucence在1999年首次发布,并于2005年成为apache基金会项目。它提供了强大的索引和搜索功能,通过简单的api就可以对外提供功能。
在2004年,Shay Banno帮助妻子学习,为其开发了一个方便搜索菜谱的应用,此时他就接触lecence,并对lecence进行了封装,此时elaseticSearch的前身Compass便诞生了。后面在2010年Compass更名为elasticSearch并对外发布;
由于ElasticSearch的火爆,Shay Banno与Uri Boness、Simon Willnauer共同组建了ElasticSarch公司,后续整合了Kibana、Beats、Logstash于2015年更名为Elastic。
二、介绍
ElasticSearch是分布式搜索和分析引擎,它基于java编程语言构建,可以在主流硬件平台上运行。在存储和计算、分析方面,elasticSearch允许执行和合并多种类型的搜索,适用于各种新用例,具有极高的可用性和容错性。
它拥有以下特点:
- 使用简单的ReSTful Api,天然兼容多语言开发;
- 使用水平横向拓展节点,通过增加节点来实现负载均衡以及增强集群可靠性;
- 面向文档,不使用“表”来存储数据,而使用“文档”来存储数据;
- 无模式,无须定义好字段类型、长度等,可以直接导入文档;
- 近实时存储,使每个字段都被索引且可用于搜索;
- 响应快,海量数据下能实现秒级响应速度;
- 易拓展,支持处理PB级数据;
- 多租户,支持多个业务共用,并且确保业务数据间的隔离性。
三、elasticSearch核心概念
集群
elasticSearch集群是一组elasticSearch节点的集合;节点根据用途不同分为不同的角色,每个节点之间可以相互通信。通常都采用集群形式部署elasticSearch,目的是实现容错和高可用。elasticSearch集群需要一个唯一标识的集群名称来防止不必要的节点加入。根据实际业务场景一个集群的节点数据从一个到数千个不等。
节点
节点指的是一个elasticSearch实例,也可以说是一个elasticSearch进程。节点可以部署到物理机或者虚拟机上。每当elasticSearch启动时,节点就会开始运行。每个节点都有唯一标识的名称,在部署多节点集群环境的时候要注意节点名称不要写错。
索引
索引时elasticSearch用于存储和管理相关数据的逻辑容器。索引可以看到数据库中的一个表。数据以JSON格式的文档存储在索引中。每个索引具有唯一的名称,并且名称必须为小谢。
分片
分片是包含索引数据的一个子集,它本身就具备完整的功能和独立性,可以将分片看成索引。当一个索引有多个分片时,elasticSearch会将请求分发到各个分片处理请求,并将他们的结果集进行处理。而对于使用elasticSearch并不需要关心它底层的分片结构,elasticSearch会自动帮忙处理好。
副本
为了防止硬件上的故障,保证集群的容错性和高可用性,elasticSearch提供了复制数据的特性。分片可以被复制,被复制的分片称为“主分片”,复制的称为“副本分片”;当主分片数据节点不可用时,集群会将副本分片升为主分片。
文档
关系型数据库,以行作为存储单元,而elasticSearch以文档作为存储单元;文档中的数据由键值对构建,键为字段的名称,值为具体的值;值包含字符串类型、数字类型等,后续详细介绍。
字段
字段是elasticSearch中的最小单位,可以把它理解成关系型数据库中的字段;差别是关系型数据库字段类型是唯一的,而elasticSearch中字段可以设定为多种。
倒排索引
在elasticSearch每个文档都可以当作一些词的集合,倒排索引就是将这些词映射到该文档上,它与关系型数据库的索引刚好相反,因此倒排索引成为elasticSearch以及其他支持全文索引数据库的关键。
映射
在elasticSearch中映射类似于关系型数据库中的Schema,但在elasticSearch中映射更为复杂,不同业务场景下映射的创建对业务使用影响会很大,后续详细介绍。
分词
构建倒排索引的关键,使elasticSearch能让用户在O(1)时间复杂度快速找回数据结果。在elasticSearch中有很多种分词器,例如常用的IK分词器,后续详细介绍。
作者:想打游戏的程序猿
链接:https://juejin.cn/post/7389428858390478859
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。