版本:ElasticSearch 7.6.1
6.x 7.x 的区别十分大,6.x API (原生API、RestFul 高级!)
Lucene 是一套信息检索工具包!jar包!,不包含搜索引擎系统!包含:索引结构、读写索引的工具、排序、搜索规则...工具类。
Lucene 和 ElasticSearch 关系
ElasticSearch 是基于Lucene 做了一些封装和增强(我们上手是十分简单!)
ElasticSearch概述
ElasticSearch,简称为es,es是一个开源的高扩展的分布式全文检索引擎,它可以近实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理PB级别(大数据时代)的数据。es也使用Java 开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得简单。
据国际权威数据库产品评测机构DB Engines的统计,在2016年1月,ElasticSearch已超过Solr等,成为排名第一的搜索引擎类应用。
历史
多年前,一个叫做Shay Banon的刚结婚不久的失业开发者,由于妻子要去伦敦学习厨师,他便跟着也去了。在他找工作的过程中,为了给妻子构建一个食谱的搜索引擎,他开始构建一个早期版本的Lucene。
直接基于Lucene工作会比较困难,所以Shay开始构建抽象Lucene代码以便Java程序员可以在应用中添加搜索功能。他发布了他的第一个开源项目,叫做“Compass”。
后来Shay找到一份工作,这份工作处在高性能和内存数据网络的分布式环境中,因此高性能的、实时的、分布式的搜索引擎也是理所当然需要的。然后他决定重写Compass库使其成为一个独立的服务叫做ElasticSeach。
第一个公开版本出现在2010年2月,在那之后ElasticSearch已经成为GitHub上最受欢迎的项目之一,代码贡献者超过300人。一家主营ElasticSearch的公司就此成立,他们一边提供商业支持一边开发新功能,不过ElasticSearch将永远开源且对所有人可用。
Shay的妻子依旧等待着他的食谱搜索...
谁在用ElasticSearch?
- 维基百科,类似百度百科、全文检索、高亮、搜索推荐(权重)
- The Guardian(国外新闻网站),类似搜狐新闻,用户行为日志(点击、浏览、收藏、评论)+ 社交网络数据(对某某新闻的相关看法),数据分析,给到每篇新闻文章的作者,让他知道他的文章的公众反馈(好,坏,热门,垃圾,鄙视,崇拜)
- Stack Overflow、GitHub、电商网站、检索商品、日志数据分析;logstach采集日志,ES进行复杂的数据分析,ELK技术,ElasticSearch + LogStash + Kibana
- 商品价格监控网站,用户设定某商品的价格阈值,当低于该阈值的时候,发送通知消息给用户,比如说订阅牙膏的监控,如果高露洁牙膏的家庭套装低于50块钱,就通知我,我就去买。
- BI系统,商业智能,Business Intelligence。比如说有个大型商场集团,BI分析一下某某区域最近3年的用户消费金额呈现100% 的增长,而且用户群体85%是最级白领,开一个新商场。ES执行数据分析和挖掘,Kibana进行数据可视化
- 国内:站内搜索(电商、招聘、门户等等),IT系统搜索(OA、CRM、ERP等等),数据分析(ES热门的一个使用场景)。
ES和Solr的差别
ElasticSearch是一个实时分布式搜索和分析引擎。它让你以前未有的速度处理大数据成为可能。它用于全文搜索、结构化搜索、分析以及将这三者混合使用。ElasticSearch是一个基于Apache Lucene(TM)的开源搜索引擎。无论在开源还是专有领域,Lucene可以被认为是迄今为止最先进、性能最好的、功能最全的搜索引擎库。
Solr是Apache下的一个顶级开源项目,采用Java开发,它是基于Lucene的全文搜索服务器。Solr提供了比Lucene更为丰富的查询语言,同时实现了可配置、可拓展,并对索引、搜索性能进行了优化。用POST方法向Solr服务器发送一个描述Field及其内容的XML文档,Solr根据xml文档添加、删除、更新索引。Solr是基于lucene开发企业级搜索服务器,实际上就是封装了lucene。Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。
Lucene 提供了一个简单却强大的应用程式接口,能够做全文索引和搜寻。在Java开发环境里Lucene是一个成熟的免费开源工具。就其本身而言,Lucene是当前以及最近几年最受欢迎的免费Java信息检索程序库。
架构选择,从两者的区别来考虑
- 当单纯的对已有数据进行搜索时,Solr更快。
- 当实时建立索引时,Solr会产生io阻塞,查询性能较差,ElasticSearch具有明显的优势。
-
随着数据量的增加,Solr的搜索效率会变得更低,而ElasticSearch却没有明显的变化。
-
转变我们的搜索基础设施后从Solr ElasticSearch,我们看见一个即时 ~ 50X 提高搜索性能!
ElasticSearch VS Solr总结
- ES 基本是开箱即用(解压就可以用!),非常简单。Solr安装略微复杂一丢丢!
- Solr 利用 Zookeeper 进行分布式管理,而ElasticSearch 自身带有分布式协调管理功能。
- Solr 支持更多格式的数据,比如JSON、XML、CSV,而ElasticSearch仅支持Json格式。
- Sorl 官方提供的功能更多,而ElasticSearch 本身更注重于核心功能,高级功能多有第三方插件提供,例如图形化界面需要kibana友好支撑
- Solr 查询更快,但更新索引时慢(即插入删除慢),用于电商等查询多的应用;
- ES 建立索引快(即查询慢),即实时性查询快,用于facebook新浪等搜索。
- Solr 是传统搜索应用的有力解决方案,但ElasticSearch 更适用于新兴的实时搜索应用。
- Sorl 比较成熟,有一个更大、更成熟的用户、开发和贡献者社区,而ElasticSearch 相对开发维护者较少,更新太快,学习使用成本较高。(趋势!!!)
ElasticSearch 安装
声明:JDK1.8,最低要求!ElasticSearch 客户端,界面工具!
Java 开发,ElasticSearch 的版本和我们之后对应的Java 的核心jar包!版本需要对应,JDK环境需要是正常的!!!
下载官网:https://www.elastic.co/cn/downloads/elasticsearch
- elasticsearch-7.6.1-windows-x86_64.zip
- elasticsearch-7.6.1-linux-x86_64.tar.gz
- elasticsearch-analysis-ik-7.6.1.zip
- kibana-7.6.1-linux-x86_64.tar.gz
- kibana-7.6.1-windows-x86_64.zip
window 下安装:
- 解压就可以使用了
- 熟悉目录;
- bin 启动文件;
- config 配置文件
- log4j2 日志配置文件
- jvm.options java 虚拟机相关的配置
- elasticsearch.yml elasticsearch 的配置文件!默认 9200端口!跨域!
- lib 相关jar 包
- logs 日志
- module 功能模块
- plugins 插件,比如:Ik分词器
- 启动:双击bin/目录下的elasticsearch.bat 文件;启动后可以看到默认的公开端口9200,通信的端口9300
- 启动成功后,访问9200:
elastic-head 下载地址:https://github.com/mobz/elasticsearch-head