持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第29天,点击查看活动详情
ElasticSearch是什么?
ElasticSearch(简称ES)是一个分布式、RESTful风格的搜索和数据分析引擎,是用Java开发并且是当前最流行的开源的企业级搜索引擎,能够达到近实时搜索,稳定,可靠,快速,安装使用方便。
客户端支持Java、.NET(C#)、PHP、Python、Ruby等多种语言。
官方网站:www.elastic.co/
下载地址:www.elastic.co/cn/download…
起源——Lucene
- 基于
Java语言开发的搜索引擎库类 - 创建于1999年,2005年成为Apache顶级开源项目
Lucene具有高性能、易扩展的优点Lucene的局限性︰-
- 只能基于
Java语言开发类 - 库的接口学习曲线陡峭
- 原生并不支持水平扩展
- 只能基于
Elasticsearch的诞生
Elasticsearch是构建在ApacheLucene之上的开源分布式搜索引擎。
- 2004年
ShayBanon基于Lucene开发了Compass - 2010年
ShayBanon重写了Compass,取名Elasticsearch
-
- 支持分布式,可水平扩展
- 降低全文检索的学习曲线,可以被任何编程语言调用
Elasticsearch与Lucene核心库竞争的优势在于:
- 完美封装了
Lucene核心库,设计了友好的Restful-API,开发者无需过多关注底层机制,直接开箱即用。 - 分片与副本机制,直接解决了集群下性能与高可用问题。
ElasticSearch版本特性
5.x新特性
Lucene6.x,性能提升,默认打分机制从TF-IDF改为BM25- 支持
Ingest节点/Painless Scripting/Completion suggested支持/原生的JavaREST客户端 Type标记成deprecated,支持了Keyword的类型- 性能优化
-
- 内部引擎移除了避免同一文档并发更新的竞争锁,带来15%-20%的性能提升
Instant aggregation支持分片,上聚合的缓存- 新增了
ProfileAPI
6.x新特性
Lucene7.x- 新功能
-
- 跨集群复制(
CCR) - 索引生命周期管理
SQL的支持
- 跨集群复制(
- 更友好的的升级及数据迁移
-
- 在主要版本之间的迁移更为简化,体验升级
- 全新的基于操作的数据复制框架,可加快恢复数据
- 性能优化
-
- 有效存储稀疏字段的新方法,降低了存储成本
- 在索引时进行排序,可加快排序的查询性能
7.x新特性
Lucene8.0- 重大改进-正式废除单个索引下多
Type的支持 - 7.1开始,
Security功能免费使用 ECK-Elasticseach Operator on Kubernetes- 新功能
-
New Cluster coordinationFeature——Complete High Level REST ClientScript Score Query
- 性能优化
-
- 默认的
Primary Shard数从5改为1,避免Over Sharding - 更快的
Top K
- 默认的
8.x新特性
RestAPI相比较7.x而言做了比较大的改动(比如彻底删除_type)- 默认开启安全配置
- 存储空间优化:
-
- 对倒排文件使用新的编码集
- 对于
keyword、match_only_text、text类型字段有效,有3.5%的空间优化提升,对于新建索引和segment自动生效。
- 优化
geo_point,geo_shape类型的索引(写入)效率:15%的提升。 - 技术预览版
KNN API发布,(K邻近算法),跟推荐系统、自然语言排名相关。
ElasticSearch vs Solr
Solr是第一个基于Lucene核心库功能完备的搜索引擎产品,诞生远早于Elasticsearch。
当单纯的对已有数据进行搜索时, Solr更快。当实时建立索引时, Solr会产生io阻塞,查询性能较差, Elasticsearch具有明显的优势。
Solr利用Zookeeper进行分布式管理,而Elasticsearch自身带有分布式协调管理功能。Solr支持更多格式的数据,比如JSON、XML、CSV,而Elasticsearch仅支持json文件格式。Solr在传统的搜索应用中表现好于Elasticsearch,但在处理实时搜索应用时效率明显低于Elasticsearch。Solr是传统搜索应用的有力解决方案,但Elasticsearch更适用于新兴的实时搜索应用。