Elasticsearch - 简介

Elasticsearch 是一个分布式、可扩展、开源的全文搜索与数据分析引擎。它可以存储、搜索、分析 PB 级别的近实时数据。Elasticsearch 使用 Lucene 作为其核心来实现所有的索引和搜索功能,通过简单的Restful API 隐藏 Lucene 的复杂性,从而让全文搜索变得简单。

功能

Elasticsearch 主要有以下几个功能:

1 结构化搜索

结构化搜索是指有关探询那些具有内在结构数据的过程。比如日期、时间和数字都是结构化的:它们有精确的格式,我们可以对这些格式进行逻辑操作。比较常见的操作包括比较数字或时间的范围,或判定两个值的大小。

文本也可以是结构化的。如彩色笔可以有离散的颜色集合: 红(red)绿(green)蓝(blue)

在结构化查询中,我们得到的结果总是非是即否,要么存于集合之中,要么存在集合之外。

2 全文搜索

全文搜索就是对一篇文章进行索引,然后根据关键字搜索,类似于 mysql 里的 like 语句。

3 聚合

通过结构化搜索和全文搜索,如果我们有一个查询并且希望找到匹配这个查询的文档集,就好比在大海捞针。而通过聚合,我们会得到一个数据的概览。我们需要的是分析和总结全套的数据而不是寻找单个文档:

  • 在大海里有多少针?

  • 针的平均长度是多少?

  • 按照针的制造商来划分,针的长度中位值是多少?

  • 每月加入到海中的针有多少?

  • 你最受欢迎的针的制造商是什么?

  • 这里面有异常的针么?

优缺点

优点:

  1. 高可用,如果某些节点出现故障时会自动分配其他节点代替其进行工作,并会把节点故障的数据复制到其它可用的节点上。

  2. 横向扩展性,可以在不停机的情况下增加新的节点,以提高集群的容量和性能。

  3. 可以扩展到上百台服务器,处理 PB 级别的结构化和非结构化数据。

缺点:

  1. Elasticsearch 不支持 ACID 事务,无法保证多个文档处于同一个事务中。

  2. Elasticsearch 的搜索是伪实时性的,默认情况下,文档从添加到对外可见能够被搜到最少要1秒钟。这么做是Lucene 为了提高写操作的吞吐量而做出的延迟牺牲,当然这个设置是可以手动调整的,但是并不建议修改它,会极大地影响搜索性能。

  3. mapping 不可变,如果需要改变付出的代价十分高的。

  4. 默认情况下,在写入文档时,需要创建和刷新索引数据,所以写入性能不高。更新和删除操作时需要 merge 操作,也会影响性能。

应用场景

Elasticsearch 根据其特点有以下几种场景:

  1. 站内搜索:Elasticsearch 是一个强大的全文搜索引擎。

  2. 大数据的实时搜索、存储、统计。

  3. 监控:统计、日志等时序数据的存储和分析、可视化。


参考文档:

  1. Elasticsearch学习,请先看这一篇!

  2. Elasticsearch: 权威指南

  3. Elasticsearch 官方文档

  4. ElasticSearch 内部机制浅析(二)

你可能感兴趣的:(Elasticsearch - 简介)