简介

Elaticsearch简称为ES,是一个开源的可扩展的分布式的全文检索引擎,它可以近乎实时的存储、检索数 据。本身扩展性很好,可扩展到上百台服务器,处理PB级别的数据。ES使用Java开发并使用Lucene作 为其核心来实现索引和搜索的功能,但是它通过简单的RestfulAPI和javaAPI来隐藏Lucene的复杂性, 从而让全文搜索变得简单。

Elasticsearch官网:https://www.elastic.co/cn/products/elasticsearch

功能

  • 分布式的搜索引擎

    分布式:Elasticsearch自动将海量数据分散到多台服务器上去存储和检索

    搜索:百度、谷歌,站内搜索

  • 全文检索

    提供模糊搜索等自动度很高的查询方式,并进行相关性排名,高亮等功能

  • 数据分析引擎(分组聚合)

    电商网站,最近一周笔记本电脑这种商品销量排名top10的商家有哪些? 新闻网站,最近1个月访问量排名top3的新闻板块是哪些?

  • 对海量数据进行近实时的处理

    海量数据的处理:因为是分布式架构,Elasticsearch可以采用大量的服务器去存储和检索数据,自然而然就可以实现海量数据的处理

    近实时:Elasticsearch可以实现秒级别的数据搜索和分析

特点

Speed:高速

Scale:易于扩展

Relevance:搜索的结果可以按照分数进行排序,它能提供我们最相关的搜索结果

  1. 安装方便:没有其他依赖,下载后安装非常方便;只用修改几个参数就可以搭建起来一个集群
  2. JSON:输入/输出格式为 JSON,意味着不需要定义 Schema,快捷方便
  3. RESTful:基本所有操作 ( 索引、查询、甚至是配置 ) 都可以通过 HTTP 接口进行
  4. 分布式:节点对外表现对等(每个节点都可以用来做入口) 加入节点自动负载均衡
  5. 多租户:可根据不同的用途分索引,可以同时操作多个索引
  6. 支持超大数据: 可以扩展到 PB 级的结构化和非结构化数据,对海量数据的近实时处理

版本介绍

目前ElasticSearch的主流版本是5.x、6.x、7.x。

ElasticSearch的版本更新极快,有的api上一个版本还在用,下一个版本就已经被废弃了。

我们主要学习的是7.x版本,7.x更新的内容如下:

  1. 集群连接变化:TransportClient被废弃。es7的java代码,只能使用restclient。对于java编程,建议采用 High-level-restclient 的方式操作ES集群。
  2. ES数据存储结构变化:简化了Type 默认使用_doc

es6时,官方就提到了es7会逐渐删除索引type,并且es6时已经规定每一个index只能有一个type。在es7中使用默认的_doc作为type,官方说在8.x版本会彻底移除type。 api请求方式也发送变化,如获得某索引的某ID的文档:GET index/_doc/id其中index和id为具体的值

  1. ES程序包默认打包jdk:以至于7.x版本的程序包大小突然增大了200MB+, 对比6.x发现,包大了200MB+, 正是JDK的大小。
  2. 默认配置变化:默认节点名称为主机名,默认分片数改为1,不再是5。
  3. Lucene升级为lucene 8 查询相关性速度优化:Weak-AND算法

es可以看做是分布式lucene,lucene的性能直接决定es的性能。lucene8在top k及其他查询上有很大的性能提升。

weak-and算法核心原理:取TOP N结果集,估算命中记录数。TOP N的时候会跳过得分低于10000的文档来达到更快的性能。

  1. 7.0将不会再有OOM的情况,JVM引入了新的circuit breaker(熔断)机制,当查询或聚合的数据量超出单机处理的最大内存限制时会被截断。

设置indices.breaker.fielddata.limit的默认值已从JVM堆大小的60%降低到40%。

  1. 引入新的集群协调子系统 移除 minimum_master_nodes 参数,让 Elasticsearch 自己选择可以形 成仲裁的节点。
  2. 间隔查询(Intervals queries): intervals query 允许用户精确控制查询词在文档中出现的先后关 系,实现了对terms顺序、terms之间的距离以及它们之间的包含关系的灵活控制。
  3. 分片搜索空闲时跳过refresh

以前版本的数据插入,每一秒都会有refresh动作,这使得es能成为一个近实时的搜索引擎。但是当没有查询需求的时候,该动作会使得es的资源得到较大的浪费。

总结

我们主要对ElasticSearch的功能特点进行了介绍,以及对主流的7.x版本的更新内容进行了详细的整理说明,以对ElasticSearch有一个整体的认识。