本篇文章对 Elasticsearch 做了基本介绍,在后续将通过专栏的方式持续更新,本系列以 Elasticsearch7 作为主要的讲解版本,欢迎各位大佬指正,共同学习进步!
一般涉及大型数据库的电子商务和搜索引擎的产品都面临这样一个问题,产品信息检索花费时间太长。这不良的用户体验,可能导致失去潜在的客户。这种滞后搜索归因于产品设计所使用到关系数据库,数据分散在多个表中,关系型数据处理这些表中数据获取搜索结果时工作速度是远远不能瞒足。可以说,现在的企业正在寻找数据存储的替代品,以期促进快速检索,而 Elasticsearch(ES)的出现很好解决这些问题。
1、什么是 Elasticsearch?
Elasticsearch 是基于 Lucene 的搜索引擎。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful Web接口。
换句话说,Elasticsearch 是用 Java 开发的开源,独立数据库服务器。基本上,它用于全文搜索和分析。它从各种来源获取数据,并将其存储为针对搜索进行了高度优化的复杂格式。如上所述,Elasticsearch 将 Apache Lucene 作为搜索的核心。由于 Lucene 只是一个库,使用起来有一定难度。但是你不必担心,Elasticsearch 对搜索引擎操作都进行封装 ,可以通过使用对应的 Restful 的 API 进行操作。使用 Elasticsearch 可以快速有效地存储,搜索和分析大量数据,而且在处理半结构化数据(即自然语言)时特别有用。
2、Elasticsearch 能做什么?
平时我们在 GitHub 上进行搜索的时候,Github 不仅可以帮我们找到相隔的代码产库,还可以帮助实现代码级的搜索及搜索词的高亮的显示,。当你在网上购物的时候,它也可以帮助你做商品的推荐。当你下班的时候,Elasticsearch 可以帮助你定位附件的乘客和司机,帮助平台优化调度,除了搜索,结合 Kibana、Logstash、Beats 的 ELK(Elastic Stack) 还被广泛使用在大数据近实时分析的领域,包括了日志分析、指标监控、信息安全等多个领域,它可以帮助你探索海量的、结构化的、非结构化的数据,按需创建是可视化报表,对监控数据设置报警阀值。
3、Elasticsearch 5、6、7版本特性史
V5.x
Lucene 6.x,
性能提升,默认打分机制从 TF-IDF 改为 BM 25
支持 Ingest 节点、 Completion suggested 、Java REST 客户端
Type 标记成 deprecated,支持了 Keyword 的类型
性能优化
减少了内部争竞争,防止对同一文档进行并发更新的竞争以及在同步事务日志时减少了锁定要求,索引吞吐量已得到了极大的提高
Instant Aggregations,在 Shard 层面提供了 Aggregation 缓存
新增了 Profile API
V6.x
Lucene 7.x
Removal of types,在 6.0 里面,开始不支持一个 index 里面存在多个 type
跨多个Elasticsearch集群搜索,保留原来的索引在 5.x 群集,跨群集搜索来同时搜索 6.x 和 5.x 群集
跨群集复制(CCR)
更友好的的升级及数据迁移,在主要版本之间的迁移更为简化,体验升级
性能优化
稀疏区域改进,降低了存储成本
通过索引排序,可加快排序的查询性能
V7.x
Lucene 8.0
重大改进-正式废除单个索引下多 Type 的支持
7.1开始,Security 功能免费使用
ECK,允许用户在 Kubernetes 上配置,管理和操作 Elasticsearch 集群
TransportClient 被废弃
以至于,ES7 的 Java 代码,只能使用 restclient
新功能
新的集群协调
功能更完善的 REST Client
Script Score Query,下一代的评分方式
性能优化
默认的 Primary Shard 数从 5 改为 1,避免 Over Sharding
性能优化,更快的 Top K 检索
4、Elasticsearch 基本概念
要了解 Elasticsearch ,首先要先了解下面的几个专有名词,索引(Index)、文档( Document)、类型(Type)
索引(Index)
Index 一索引是文档的容器,是一类文档的结合
Index 体现了逻辑空间的概念:每个索引都有自己的 Mapping,用于定义包含的文档的字段名和字段类型
Shard 体现了物理空间的概念:索引中的数据分散在 Shard 上
索引的 Mapping 与 Settings
Mapping 定义文档字段的类型
Setting 定义不同的数据分布