1. 什么是搜索?
在日常的工作和学习中,当我们说想找查询任何的信息的时候,可能第一时间会想到上百度或者谷歌去搜索一下。比如说找一部自己喜欢的电影,或者说找一本喜欢的书,或者找一条感兴趣的新闻。但是百度和谷歌不等于搜索,他们只是我们搜索时使用的工具。
搜索,就是在任何场景下,查找你想要的信息。这个时候需要输入一段你要搜索的关键字,然后就期望找到这个关键字相关的信息。
2. 用数据库做搜索
对于大多数程序员而言,大家都清楚数据都是存储在数据库里面的。比如说电商网站的商品信息,招聘网站的职位信息,新闻网站的新闻信息等等。所以说,很自然的我们会考虑到去使用数据库去进行搜索,例如使用MySQL数据库进行查询。
假如我们想要购买一件男士的T恤,在购物平台上搜索『男士T恤』,那么如果直接使用关键词在数据里中模糊搜索可能是怎么样的呢?
select * from table where pruduct_name like '%男士T恤%'
我们且不考虑数据库的全文索引什么的,假如电商网站中国的商品数量只有1000万个(其实远远不止吧),那么基本上就要查找1000万次,且每次都需要加载商品的名称字段的整段字符串,因为这种模糊查询很难使用索引来进行优化。
直接使用数据库进行搜索有几个严重的问题:
- 就拿商品描述这个字段来说,他的字段的长度可能有十几、上百个字,在查询的时候要对每条记录的所有文本进行扫描,来判断字段中是否包含用户指定的关键词。
- 没办法将搜索词拆分开来,尽可能去搜索更多的符合你的期望的结果,比如输入“男士T恤”,就搜索不出来“男士黑色T恤”。
- 用数据库来进行搜索,由于数据量非常大,检索起来性能会非常的差。
3. 什么是Elasticsearch
ElasticSearch是一款非常强大的、基于Lucene的开源搜索及分析引擎;它是一个实时的分布式搜索分析引擎,它能让你以前所未有的速度和规模,去探索你的数据。
它被用作全文检索、结构化搜索、分析以及这三个功能的组合。除了搜索,结合Kibana、Logstash、Beats开源产品,Elastic Stack(简称ELK)还被广泛运用在大数据近实时分析领域,包括:日志分析、指标监控、信息安全等。它可以帮助你探索海量结构化、非结构化数据,按需创建可视化报表,对监控数据设置报警阈值,通过使用机器学习,自动识别异常状况。
关于ElasticSearch的由来还有一个小故事:
许多年前,一个刚结婚的名叫 Shay Banon 的失业开发者,跟着他的妻子去了伦敦,他的妻子在那里学习厨师。 在寻找一个赚钱的工作的时候,为了给他的妻子做一个食谱搜索引擎,他开始使用 Lucene 的一个早期版本。
直接使用 Lucene 是很难的,因此 Shay 开始做一个抽象层,Java 开发者使用它可以很简单的给他们的程序添加搜索功能。 他发布了他的第一个开源项目 Compass。
后来 Shay 获得了一份工作,主要是高性能,分布式环境下的内存数据网格。这个对于高性能,实时,分布式搜索引擎的需求尤为突出, 他决定重写 Compass,把它变为一个独立的服务并取名 Elasticsearch。
第一个公开版本在2010年2月发布,从此以后,Elasticsearch 已经成为了 Github 上最活跃的项目之一,他拥有超过300名 contributors(目前736名 contributors )。 一家公司已经开始围绕 Elasticsearch 提供商业服务,并开发新的特性,但是,Elasticsearch 将永远开源并对所有人可用。
据说,Shay 的妻子还在等着她的食谱搜索引擎…
刚有多次提到Lucene,ElasticSearch是基于Lucene的。但是Lucene仅仅只是一个库。为了充分发挥其功能,你还需要自己使用Java将Lucene集成到自己的应用程序中。 更糟糕的是,Lucene非常复杂,对于程序员而言学习成本非常的大。而Elasticsearch也是使用 Java 编写的,它的内部使用 Lucene 做索引与搜索,但是它的目的是使全文检索变得简单,通过隐藏 Lucene 的复杂性,取而代之的提供一套简单一致的 RESTful API。
根据DB Engine的排名,ElasticSearch已经称为最受欢迎的企业级搜索引擎。
4. 主要功能及应用场景
4.1 主要功能
海量数据的分布式存储以及集群管理
搜索引擎:百度、网站的站内搜索、IT系统的检索
数据分析:电商网站,最近7天牙膏这种商品销量排名前10的商家有哪些;新闻网站,最近1个月访问量排名前3的新闻版块是哪些
分布式:ES自动可以将海量数据分散到多台服务器上去存储和检索
全文检索,结构化检索,数据分析
全文检索:搜索商品名称包含牙膏的商品。
结构化检索:搜索商品分类为日化用品的商品都有哪些。
部分匹配、自动完成、搜索纠错、搜索推荐
对海量数据进行近实时的处理
海联数据的处理:可以采用大量的服务器去存储和检索数据,自然而然就可以实现海量数据的处理
近实时:在秒级别对数据进行搜索和分析
4.2 应用场景
- 网站搜索、垂直搜索、代码搜索;
- 日志管理与分析、安全指标监控、应用性能监控、Web抓取舆情分析;