是什么
开源的可扩展的分布式全文检索引擎,处理PB级别的数据。使用java开发,基于Lucene来实现索引和搜索功能,通过简单的RestfulAPI和javaAPI来隐藏Lucene的复杂性。
官网:www.elastic.co/cn/products…
有哪些功能
- 分布式的搜索引擎
将海量数据分散到多台服务器上去存储和检索
- 全文检索
提供模糊搜索等自动度很高的查询方式,并进行相关性排名、高亮等功能
- 数据分析引擎(分组聚合)
电商网站,最近一周笔记本电脑这种商品销量排名top10的商家有哪些?
新闻网站,最近1个月访问量排名top3的新闻板块是哪些?
- 对海量数据进行近实时的处理
因为是分布式架构,Elasticsearch可以采用大量的服务器去存储和检索数据,自然而然就可以实现海量数据的处理。近实时:Elasticsearch可以实现秒级别的数据搜索和分析
特点
- 安装方便:没有其他依赖,下载后安装非常方便;只用修改几个参数就可以搭建起来一个集群
- JSON:输入/输出格式为JSON,意味着不需要定义Schema,快捷方便
- Restful:基本所有操作(索引、查询。甚至是配置)都可以通过HTTP接口进行
- 分布式:节点对外表现对等(每个节点都可以用来做入口)加入节点自动负载均衡
- 多租户:可根据不同的用途分索引,可以同时操作多个索引
- 支持超大数据:可以扩展到PB级的结构化和非结构化数据,海量数据的近实时处理
企业应用场景
- 搜索类
电商网站、招聘网站、新闻资讯类网站、各种APP内的搜索
- 日志分析类
经典的ELK组合(Elasticsearch/Logstash/Kibana),可以完成日志收集,存储,分析查询界面基本功能,目前该方案的实现很普及,大部分企业日志分析系统使用了改方案。
- 数据预警平台及数据分析场景
例如电商价格预警,在支持的电商平台设置价格预警,当优惠的价格低于某个值时,触发通知消息,通知用户购买。
数据分析常见的比如分析电商平台销售量top10的品牌,分析博客系统、头条网站top10关注度、评论数、访问量的内容等等。
- 商业BI(Business Intelligence)系统
比如大型零售超时,需要分析上一季度用户消费金额,年龄段,每天各时间段到店人数分布等信息,输出相应的报表数据,并预测下一季度的热卖商品,根据年龄段定向推荐适宜产品。
Elasticsearch执行数据分析和挖掘,Kibana做数据可视化。
常见案例
- 维基百科、百度百科:有全文检索、高亮、搜索推荐功能
- Stack overflow:有全文检索,可以根据报错关键信息,去搜索解决方法。
- github:从上千亿行代码中搜索你想要的关键代码和项目。
- 日志分析系统:各企业内部搭建的ELK平台
主流全文搜索方案对比
- Lucene
是Apache基金会维护的一套完全使用java编写的信息搜索工具包(Jar包),它包含了索引结构、读写索引工具、相关性工具、排序等功能。因此在使用Lucene时仍需我们自己进一步开发搜索引擎系统,例如数据获取、解析、分词等。
- Solr
是一个有HTTP接口的基于Lucene的查询服务器,是一个搜索引擎系统,封装了很多Lucene细节,Solr可以直接利用HTTP GET/POST请求去查询,维护修改索引。
- Elasticsearch
建立在全文搜索引擎Lucene基础上的搜索引擎。采用的策略是分布式实时文件存储,并将每个字段都编入索引,使其可以被搜索。
三者之间的区别和联系
Solr和Elasticsearch都是基于Lucene实现的。但Solr和Elasticsearch之间也是有区别的
- Solr利用Zookpper进行分布式管理,而Elasticsearch自身带有分布式协调管理功能
- Solr比Elasticsearch实现更加全面,Solr官方提供的功能更多,而Elasticsearch本身更注重于核心功能,高级功能多由第三方插件提供
- Solr在传统的搜索应用中表现好于Elasticsearch,而Elasticsearch在实时搜索应用方面比Solr表现好