什么是ElasticSearch

ElasticSearch是一款非常强大的、基于Lucene的开源搜索及分析引擎;它是一个实时的分布式搜索分析引擎,它能让你以前所未有的速度和规模,去探索你的数据。

它在用作全文检索、结构化搜索、分析以及这三个功能的组合:

除了搜索,结合Kibana、Logstash、Beats开源产品,Elastic Stack(简称ELK)还被广泛运用在大数据近实时分析领域,包括:日志分析、指标监控、信息安全灯。它可以帮助你探索海量结构化、非结构化,按需创建可视化报表,对监控数据设置报警阈值,通过使用机器学习,自动识别异常状态。

ElasticSearch是基于Restful WebAPI,使用Java语言开发的搜索引擎库类,并作为APache许可条款下的开放源码发布,是当前流行企业级搜索引擎。其客户端在Java、C#、PHP、Python灯许多语言中都是可用的。

ElasticSearch的由来

ElasticSearch背后的小故事
许多年前,一个刚结婚的名为Shay Banon的失业开发者,跟着他的妻子去了伦敦,他的妻子在那学习厨师。在寻找一个赚钱的工作的试试,为了给他的妻子做一个食谱搜索引擎,他开始使用Lucene的一个早期版本。

直接使用lucene是河南的,因为shay开始做一个抽象层,Java开发者使用它可以很简单的给他们的程序添加搜索功能。他发布了他的第一个开源项目Compass。

后来shay获得了一份工作,主要是高性能,分布式环境下的内存数据网络。这个对于高性能,实时,分布式搜索引擎的需求尤为突出,他决定重写Compass,把它变成一个独立的服务并取名为ElasticSearch。

第一个公开版本在2010年2月发布,从此以后,ElasticSearch已经成为Github上最活跃的项目之一,它拥有超过300名contributors。一家公司一开始围绕ElasticSearch提供商业服务,并开始新的特性。但是ElasticSearch将永远开源并对所有人可用。

据说,shay的妻子还在等着她的食谱搜索引擎……

为什么不是直接使用Lucene

ElasticSearch是基于Lucene的,那么为什么不是直接使用Lucene呢?
Lucene可以说是当下最先进、高性能、全功能的搜索引擎库。

但是Lucene仅仅只是一个库。为了充分发挥其功能,你需要使用Java并将Lucene直接集成到应用程序中。更糟糕的是,您可能需要获得信息检索学位才能了解其工作原理。Lucene非常复杂。

ElasticSearch也是使用Java编写的,它的内部使用Lucene做索引和搜索,但是它的目的是使全文检索变得简单,通过隐藏Lucene的复杂性,取而代之的是提供一套简单一致的RESTful API。

然而,ElasticSearch不仅仅是Lucene,并且也不仅仅是一个全文搜索引擎。他可以被下面准确的形容:

ElasticSearch的主要功能及应用场景
我们在哪些场景下可以使用ES呢

ElasticSearch的基础概念

我们还需要对比结构化数据库,看看ES的基础概念,为我们后面学习做铺垫

为了方便理解,做一个ES和数据库的对比:

RDBMS ElasticSearch
数据库(database) 索引(Index)
表(table) 类型(type)
行(row) 文档(document)
列(column) 字段(field)
表结构(scheme) 映射(mapping)
索引 反向索引
SQL 查询DSL
select * from table GET http://……
update table set PUT http://……
delete from table DELETE http://……

参考文章

你知道的, 为了搜索…​
基础入门
elasticsearch系列一:elasticsearch(ES简介、安装&配置、集成Ikanalyzer)