Elasticsearch 核心特性与应用指南
最近在准备面试,正把平时积累的笔记、项目中遇到的问题与解决方案、对核心原理的理解,以及高频业务场景的应对策略系统梳理一遍,既能加深记忆,也能让知识体系更扎实,供大家参考,欢迎讨论。
一、核心优势
Elasticsearch可以实现秒级的搜索,cluster(集群)分布式部署,极易扩展,这样很容易使它处理PB级的数据库容量。最重要的是Elasticsearch使它搜索的结果可以按照分数进行排序,它能提供我们最相关的搜索结果(relevance-相关性)。
二、主要特点
-
安装方便:没有其他依赖,下载后安装非常方便;只用修改几个参数就可以搭建起来一个集群(工作中一般使用阿里云等云厂商的ES服务,很少有自己搭建的)
-
JSON格式:输入/输出格式为JSON,意味着不需要定义Schema,快捷方便
- Schema(模式)通常指的是一种描述数据结构的规范或定义。它定义了数据的组织方式、字段的类型以及数据之间的关系。使用模式能够确保数据的一致性、完整性和有效性,并为数据的生成、解析、验证提供了标准
-
RESTful接口:基本所有操作(索引、查询、甚至是配置)都可以通过HTTP接口进行
-
分布式架构:节点对外表现对等(每个节点都可以用来做入口),加入节点自动负载均衡
-
多租户支持:可根据不同的用途分索引,可以同时操作多个索引
- 共享底层资源、逻辑隔离上层数据、支持并行操作
- 在Elasticsearch中,多租户模式通常涉及根据不同的用途或不同的用户组织创建不同的索引,使得这些索引能够彼此独立存在,而且可以同时操作多个索引。这样的设计允许不同的用户、组织或应用程序在同一个Elasticsearch集群中使用各自的索引,实现数据的隔离和独立管理
-
大数据支持:可以扩展到PB级的结构化和非结构化数据,支持海量数据的近实时处理
三、核心功能
- 分布式搜索引擎
- 自动将海量数据分散到多台服务器上去存储和检索
- 全文检索
- 提供模糊搜索等自动化程度很高的查询方式,并进行相关性排名,高亮等功能
- 数据分析引擎(分组聚合)
- 适用于社区网站等场景的最近一周用户登录、最近一个月各功能使用情况等分析
- 近实时处理
- 对海量数据进行近实时(秒级)的处理,采用分布式架构实现水平扩展
四、应用场景
- 搜索类场景
- 人员检索、设备检索、App内的搜索、订单搜索、IM消息搜索
- 日志分析类场景
- 经典的ELK组合(Logstash/Elasticsearch/Kibana),实现日志收集,日志存储,日志分析
- 数据预警平台及数据分析场景
- 例如社区团购提示,当优惠的价格低于某个值时,自动触发通知消息
- 分析竞争对手商品销量Top10,供运营分析
- 商业智能(BI)系统
- 分析某一地区用户消费金额及商品类别,输出相应的报表数据
- 预测该地区的热卖商品,通过区域和人群特征划分进行定向推荐
- Elasticsearch执行数据分析和挖掘,Kibana做数据可视化
五、竞品对比
- Lucene
- Java编写的信息搜索工具包(Jar包),只是一个框架,熟练运用非常复杂
- Solr
- 基于Lucene的HTTP接口查询服务器,是一个封装了很多Lucene细节的搜索引擎系统
- Elasticsearch
- 基于Lucene的分布式海量数据近实时搜索引擎,采用的策略是将每一个字段都编入索引,使其可以被搜索
对比
- Solr利用Zookeeper进行分布式管理,而Elasticsearch自身带有分布式协调管理功能
- Solr比Elasticsearch实现更加全面,而Elasticsearch本身更注重于核心功能,高级功能多由第三方插件提供
- Solr在传统的搜索应用中表现好于Elasticsearch,而Elasticsearch在实时搜索应用方面比Solr表现好
当前版本信息
- 目前主流依然是Elasticsearch7.x,最新的是7.8,推荐使用JDK11(LTS),也兼容JDK8,目前工作中用到的
- 优化:集成默认JDK、升级Lucene8大幅提升TopK性能、引入熔断机制避免OOM发生
- 集成默认JDK:确保Elasticsearch版本与JDK版本兼容
- 升级Lucene8:带来性能提升,但需确保版本匹配
- 引入熔断机制:避免OOM错误,需合理配置参数
六、多租户架构
- 概念
- 允许单一软件实例同时为多个租户提供服务,每个租户拥有独立空间和资源
- Elasticsearch中的实现
- 通过不同索引为每个租户分隔数据
- 提供RBAC和索引别名实现权限管理和操作灵活性
- 关键要素
- 租户:独立使用者或实体
- 索引隔离:为每个租户分配独立的索引空间(单个或多个索引)
- 权限控制:管理各租户数据访问权限
- 资源隔离:保障各租户资源配额
七、字段索引控制
- 索引设置选项
- “index”: true:默认设置,字段会被分析以支持全文搜索
- “index”: false:不对该字段建立索引,适用于不需要搜索的字段
- “index”: “no”:早期版本中表示不建立索引(与false相似)
- 应用场景
- 对不需要进行搜索的字段禁用索引,可减少存储空间并提高索引构建速度