ElasticSearch简介

1,180 阅读4分钟

ElasticSearch是什么

ElasticSearch(简称ES)是一个分布式、RESTful 风格的搜索和数据分析引擎,是用Java开发并且是当前最流行的开源的企业级搜索引擎,能够达到近实时搜索,稳定,可靠,快速,安装使用方便。

客户端支持Java、.NET(C#)、PHP、Python、Ruby等多种语言。

官方网站: www.elastic.co/

下载地址:www.elastic.co/cn/download…

搜索引擎排名: image.png 参考网站:db-engines.com/en/ranking/…

起源——Lucene

  • 基于Java语言开发的搜索引擎库类
  • 创建于1999年,2005年成为Apache 顶级开源项目
  • Lucene具有高性能、易扩展的优点
  • Lucene的局限性︰
    • 只能基于Java语言开发
    • 类库的接口学习曲线陡峭
    • 原生并不支持水平扩展

Elasticsearch的诞生

Elasticsearch是构建在Apache Lucene之上的开源分布式搜索引擎。

  • 2004年 Shay Banon 基于Lucene开发了Compass
  • 2010年 Shay Banon重写了Compass,取名Elasticsearch
    • 支持分布式,可水平扩展
    • 降低全文检索的学习曲线,可以被任何编程语言调用

Elasticsearch 与 Lucene 核心库竞争的优势在于:

  • 完美封装了 Lucene 核心库,设计了友好的 Restful-API,开发者无需过多关注底层机制,直接开箱即用。
  • 分片与副本机制,直接解决了集群下性能与高可用问题。

ES Server进程 3节点 raft (奇数节点)

数据分片 -》lucene实例 分片和副本数 1个ES节点可以有多个lucene实例。也可以指定一个索引的多个分片 clipboard (11).png

ElasticSearch版本特性

5.x新特性

  • Lucene 6.x, 性能提升,默认打分机制从TF-IDF改为BM 25
  • 支持Ingest节点/ Painless Scripting / Completion suggested支持/原生的Java REST客户端
  • Type标记成deprecated, 支持了Keyword的类型
  • 性能优化
    • 内部引擎移除了避免同一文档并发更新的竞争锁,带来15% - 20%的性能提升
    • Instant aggregation,支持分片,上聚合的缓存
    • 新增了Profile API

6.x新特性

  • Lucene 7.x
  • 新功能
    • 跨集群复制(CCR)
    • 索引生命周期管理
    • SQL的支持
  • 更友好的的升级及数据迁移
    • 在主要版本之间的迁移更为简化,体验升级
    • 全新的基于操作的数据复制框架,可加快恢复数据
  • 性能优化
    • 有效存储稀疏字段的新方法,降低了存储成本
    • 在索引时进行排序,可加快排序的查询性能

7.x新特性

  • Lucene 8.0
  • 重大改进-正式废除单个索引下多Type的支持
  • 7.1开始,Security 功能免费使用
  • ECK - Elasticseach Operator on Kubernetes
  • 新功能
    • New Cluster coordination
    • Feature——Complete High Level REST Client
    • Script Score Query
  • 性能优化
    • 默认的Primary Shard数从5改为1,避免Over Sharding
    • 性能优化, 更快的Top K

8.x新特性

  • Rest API相比较7.x而言做了比较大的改动(比如彻底删除_type)
  • 默认开启安全配置
  • 存储空间优化:对倒排文件使用新的编码集,对于keyword、match_only_text、text类型字段有效,有3.5%的空间优化提升,对于新建索引和segment自动生效。
  • 优化geo_point,geo_shape类型的索引(写入)效率:15%的提升。
  • 技术预览版KNN API发布,(K邻近算法),跟推荐系统、自然语言排名相关。
  • www.elastic.co/guide/en/el…

ElasticSearch vs Solr

Solr 是第一个基于 Lucene 核心库功能完备的搜索引擎产品,诞生远早于 Elasticsearch。

当单纯的对已有数据进行搜索时,Solr更快。当实时建立索引时, Solr会产生io阻塞,查询性能较差, Elasticsearch具有明显的优势。

截图 (3).png

截图 (4).png 大型互联网公司,实际生产环境测试,将搜索引擎从Solr转到 Elasticsearch以后的平均查询速度有了50倍的提升。

截图 (5).png

总结:

  • Solr 利用 Zookeeper 进行分布式管理,而Elasticsearch 自身带有分布式协调管理功能。
  • Solr 支持更多格式的数据,比如JSON、XML、CSV,而 Elasticsearch 仅支持json文件格式。
  • Solr 在传统的搜索应用中表现好于 Elasticsearch,但在处理实时搜索应用时效率明显低于 Elasticsearch。
  • Solr 是传统搜索应用的有力解决方案,但 Elasticsearch更适用于新兴的实时搜索应用。