Elasticsearch介绍
示例代码地址
🔖 代码-github (opens new window)
部分资源
# 是什么
Elaticsearch 简称 ES
一个开源的高扩展的分布式全文搜索引擎
支持RESTful风格的搜索和数据分析
可以近乎实时的存储、检索数据
本身扩展性很好,可以扩展到上百台服务器,处理 PB 级别的数据
Elastic Stack的核心
Elastic Stack(ELK Stack)
包括Elasticsearch,Kibana,Beats,Logstash
可以安全可靠的获取任何来源,任何格式的数据
实时地对数据进行搜索、分析和可视化
# 全文搜索引擎
Google,百度类的网站搜索,它们都是根据网页中的关键字生成索引,在搜索的时输入关键字,它们会将该关键字即索引匹配到的所有网页返回,还有常见的项目中应用日志的搜索等等。对于这些非结构化的数据文本,关系型数据库搜索不是能很好的支持
一般传统数据库,全文检索都实现的很鸡肋,因为一般也没人用数据库存文本字段。进行全文检索需要扫描整个表,如果数据量大的话即使对 SQL 的语法优化,也收效甚微。建立了索引,但是维护起来也很麻烦,对于 insert 和 update 操作都会重新构建索引
基于以上原因可以分析得出,在一些生产环境中,使用常规的搜索方式,性能是非常差的
- 搜索的数据对象是大量的非结构化的文本数据
- 文件记录量达到数十万或数百万个甚至更多
- 支持大量基于交互式文本的查询
- 需求非常灵活的全文搜索查询
- 对高度相关的搜索结果的有特殊需求,但是没有可用的关系数据库可以满足
- 对不同记录类型、非文本数据操作或安全事务处理的需求相对较少的情况。为了解决结构化数据搜索和非结构化数据搜索性能问题,我们就需要专业,健壮,强大的全文搜索引擎
全文搜索引擎指的是目前广泛应用的主流搜索引擎。它的工作原理是计算机索引程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方式。这个过程类似于通过字典中的检索字表查字的过程
# Elasticsearch & Solr
Lucene 是 Apache 软件基金会 Jakarta项目组的一个子项目
- 提供了一个简单却强大的应用程式接口,能够做全文索引和搜寻
- 在 Java 开发环境里 Lucene 是一个成熟的免费开源工具
- Lucene 是当前以及最近几年最受欢迎的免费 Java 信息检索程序库
- 只是一个提供全文搜索功能类库的核心工具包,而真正使用它还需要一个完善的服务框架搭建起来进行应用
主流的搜索引擎软件Elasticsearch 和 Solr
- 都是基于 Lucene 搭建的,可独立部署启动的搜索引擎服务软件
- 内核相同,除了服务器安装、部署、管理、集群以外,对于数据的操作 修改、添加、保存、查询等等都十分类似
对比
# 应用案例
- GitHub: 2013 年初,抛弃了 Solr,采取 Elasticsearch 来做 PB 级的搜索。“GitHub 使用Elasticsearch 搜索 20TB 的数据,包括 13 亿文件和 1300 亿行代码”
- 维基百科:启动以 Elasticsearch 为基础的核心搜索架构
- SoundCloud:使用 Elasticsearch 为 1.8 亿用户提供即时而精准的音乐搜索服务
- 百度:目前广泛使用 Elasticsearch 作为文本数据分析,采集百度所有服务器上的各类指标数据及用户自定义数据,通过对各种数据进行多维分析展示,辅助定位分析实例异常或业务层面异常。目前覆盖百度内部 20 多个业务线(包括云分析、网盟、预测、文库、直达号、钱包、风控等),单集群最大 100 台机器,200 个 ES 节点,每天导入 30TB+数据
- 新浪:使用 Elasticsearch 分析处理 32 亿条实时日志
- 阿里:使用 Elasticsearch 构建日志采集和分析体系
- Stack Overflow:解决 Bug 问题的网站,全英文,编程人员交流的网站
Last Updated: 2022/02/05, 15:58:51