什么是ElasticSearch?
ElasticSearch是一个实时分布式搜索和分析引擎,它用于全文搜索
、结构化搜索
、分析
以及将这三者混合使用。
现在有哪些公司用到?
维基百科
使用Elasticsearch提供全文搜索并高亮关键字,以及输入实时搜索(search-as-you-type)和搜索纠错(did-you-mean)等搜索建议功能。
英国卫报
使用Elasticsearch结合用户日志和社交网络数据提供给他们的编辑以实时的反馈,以便及时了解公众对新发表的文章的回应。
StackOverflow
结合全文搜索与地理位置查询,以及more-like-this (更多相关问题)功能来找到相关的问题和答案。
Github
使用Elasticsearch检索1300亿行的代码。
对比传统数据库(Mysql)查询
《倚天屠龙记》的所有篇章中,要找出所有出现周芷若的章节。mysql如何查询?
淘宝现在有上亿商品条目,每个商品的品牌,种类,用途,价格,描述都是不同的。用户输入
能50倍变焦的手机
,Mysql如何查询?-
用户输入
整容
,在百度百科中快速找到有整容相关字段的文章。Mysql如何查询。结论: 现在大部分数据库在提取可用知识方面显得异常无能。它们能够通过时间戳或者精确匹配做过滤,但是它们能够进行全文搜索,处理同义词和根据相关性给文档打分吗?它们能根据同一份数据生成分析和聚合的结果吗?大部分数据库在对模糊搜索的处理上,性能很差。
对比传统数据库(Mysql)的存储方式
现在有这样一个对象,要把他存到数据库中:
{
"errorCode": 0,
"msg": "success",
"data": {
"list": {
"current_page": 1,
"data": [
{
"mobile": "17623232323",
"intention": 1,
"share_name": "本",
"share_mobile": "13912345678",
"create_date": "2019-03-06 13:05:41"
},
{
"mobile": "17812345678",
"intention": 1,
"share_name": "老刘",
"share_mobile": "13512345678",
"create_date": "2019-03-05 14:05:18"
}
],
"to": 2,
"total": 2
}
}
}
Mysql适合存储一一对应的关系数据,对于这种对象中包含对象,对象中包含数组的数据结构不是很擅长。Mysql处理这种数据一般是创建多个表,关联他们的关系。如果对象更复杂,数据更多的时候,那连表查询也是很大的性能消耗,而且后期加减字段的代价都很大。
现在有Elasticsearch
这个解决方案。Elasticsearch
是面向文档(document oriented)的,直接将整个对象用JSON的方式存储。这意味着它可以存储整个对象或文档(document)。然而它不仅仅是存储,还会索引(index)每个文档的内容使之可以被搜索。
Mysql -> Databases -> Tables -> Rows -> Columns
ES -> Indices -> Types -> Documents -> Fields
关于ElasticSearch的几个关系
Elasticsearch
是一个基于Apache Lucene(TM)的开源搜索引擎。
Lucene
可以被认为是迄今为止最先进、性能最好的、功能最全的搜索引擎库。
Lucene
的使用异常复杂,需要使用者深入了解检索相关的知识来使用他,使用成本和学习成本都很高。所以ES出现了。Elasticsearch
使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,它的目的是通过简单的RESTful API
来隐藏Lucene的复杂性,从而让全文搜索变得简单。而且ES在其基础上还扩展了很多个功能。
关于ES起源的小趣闻
多年前,一个叫做Shay Banon的刚结婚不久的失业开发者,由于妻子要去伦敦学习厨师,他便跟着也去了。在他找工作的过程中,为了给妻子构建一个食谱的搜索引擎,他开始构建一个早期版本的Lucene。
直接基于Lucene工作会比较困难,所以Shay开始抽象Lucene代码以便Java程序员可以在应用中添加搜索功能。他发布了他的第一个开源项目,叫做“Compass”。
后来Shay找到一份工作,这份工作处在高性能和内存数据网格的分布式环境中,因此高性能的、实时的、分布式的搜索引擎也是理所当然需要的。然后他决定重写Compass库使其成为一个独立的服务叫做Elasticsearch。
第一个公开版本出现在2010年2月,在那之后Elasticsearch已经成为Github上最受欢迎的项目之一,代码贡献者超过300人。一家主营Elasticsearch的公司就此成立,他们一边提供商业支持一边开发新功能,不过Elasticsearch将永远开源且对所有人可用。
Shay的妻子依旧等待着她的食谱搜索……(意思是妻子还没有用到)