ElasticSearch系列之什么是ElasticSearch?
概念:用户输入关键词,搜索引擎返回包含改关键词的所有信息
ElasticSearch是一款开源的高扩展的分布式全文检索引擎,可以近实时地查询分析数据。实现基于Lucene,封装了许多Lucene底层的功能,提供了简单易用的RestFul API接口和很多语言的客户端,如Java的高级客户端(Java High Level REST Client)和底层客户端(Java Low Level REST Client)
起源:Shay Banon。2004年失业,陪老婆去伦敦学习厨师。失业在家帮老婆写一个菜谱搜索 擎。封装了lucene的开源项目,开发出了项目compass。找到工作后,做分布式高性能项目,再封装 compass,写出了elasticsearch,使得lucene支持分布式。现在是Elasticsearch创始人兼Elastic 首席执行官。
ElasticSearch相对数据库搜索来说,在数据量很大时候可以体现出来,比如pb级别数据。数据库搜索的缺点
pb:PB是数据存储容量的单位,它等于2的50次方个字节,或者在数值上大约等于1000个TB
ElasticSearch支持分布式和大数据场景,可以应用于多个领域。比如:
下面列举国外国内应用ElasticSearch的例子: 国外:
索引创建规则:
\、/、*、?、"、<、>、|、#
以及空格符等特殊符号;(从7.0版本开始不能再包含冒号)-
、_
或+
开头为什么要在7.x版本去除type? 还是要先从ElasticSearch的设计历史说起,因为关系型数据库比非关系型数据库的概念要提出的早,而且很成熟,应用广泛。所以后面很多nosql,比如MongoDB、ElasticSearch都参考了传统关系型数据库的概念。需要有一个对应数据库中表的概念,所以就设计了type对document进行归类。但是ElasticSearch是基于Lucene的,ES为什么搜索快?主要是因为要index,也就是倒排索引,并非是因为type,多个type查询时候反而会减慢查询的速度。为了保持ElasticSearch“一切为了搜索”的宗旨,适当的去除type也是无可厚非的。但是很多项目都已经应用了type,所以推迟到7.x版本才完成这个版本升级
关系型数据库(MySQL) | 非关系型数据库(ElasticSearch) |
---|---|
数据库Database | 索引Index |
表Table | 索引Index(7.x之前版本为type) |
数据行Row | 文档Document |
数据列Column | 字段Field |
约束Schema | 映射Mapping |