ElasticSearch 与 Solr 对比

版本: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?

  1. 维基百科,类似百度百科、全文检索、高亮、搜索推荐(权重)
  2. The Guardian(国外新闻网站),类似搜狐新闻,用户行为日志(点击、浏览、收藏、评论)+ 社交网络数据(对某某新闻的相关看法),数据分析,给到每篇新闻文章的作者,让他知道他的文章的公众反馈(好,坏,热门,垃圾,鄙视,崇拜)
  3. Stack Overflow、GitHub、电商网站、检索商品、日志数据分析;logstach采集日志,ES进行复杂的数据分析,ELK技术,ElasticSearch + LogStash + Kibana
  4. 商品价格监控网站,用户设定某商品的价格阈值,当低于该阈值的时候,发送通知消息给用户,比如说订阅牙膏的监控,如果高露洁牙膏的家庭套装低于50块钱,就通知我,我就去买。
  5. BI系统,商业智能,Business Intelligence。比如说有个大型商场集团,BI分析一下某某区域最近3年的用户消费金额呈现100% 的增长,而且用户群体85%是最级白领,开一个新商场。ES执行数据分析和挖掘,Kibana进行数据可视化
  6. 国内:站内搜索(电商、招聘、门户等等),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总结

  1. ES 基本是开箱即用(解压就可以用!),非常简单。Solr安装略微复杂一丢丢!
  2. Solr 利用 Zookeeper 进行分布式管理,而ElasticSearch 自身带有分布式协调管理功能。
  3. Solr 支持更多格式的数据,比如JSON、XML、CSV,而ElasticSearch仅支持Json格式。
  4. Sorl 官方提供的功能更多,而ElasticSearch 本身更注重于核心功能,高级功能多有第三方插件提供,例如图形化界面需要kibana友好支撑
  5. Solr 查询更快,但更新索引时慢(即插入删除慢),用于电商等查询多的应用;
    1. ES 建立索引快(即查询慢),即实时性查询快,用于facebook新浪等搜索。
    2. Solr 是传统搜索应用的有力解决方案,但ElasticSearch 更适用于新兴的实时搜索应用。
  6. Sorl 比较成熟,有一个更大、更成熟的用户、开发和贡献者社区,而ElasticSearch 相对开发维护者较少,更新太快,学习使用成本较高。(趋势!!!

ElasticSearch 安装

声明:JDK1.8,最低要求!ElasticSearch 客户端,界面工具!

Java 开发,ElasticSearch 的版本和我们之后对应的Java 的核心jar包!版本需要对应,JDK环境需要是正常的!!!

下载官网:https://www.elastic.co/cn/downloads/elasticsearch

window 下安装:

  1. 解压就可以使用了
  2. 熟悉目录;
    1. bin 启动文件;
    2. config 配置文件
      1. log4j2             日志配置文件
      2. jvm.options             java 虚拟机相关的配置
      3. elasticsearch.yml             elasticsearch 的配置文件!默认 9200端口!跨域!
    3. lib             相关jar 包
    4. logs          日志    
    5. module    功能模块
    6. plugins     插件,比如:Ik分词器
  3. 启动:双击bin/目录下的elasticsearch.bat 文件;启动后可以看到默认的公开端口9200,通信的端口9300
    1. 启动成功后,访问9200:

elastic-head 下载地址:https://github.com/mobz/elasticsearch-head

 

 

 

 

 

 

 

 

 

 

 

 

 

 

使用方法:打开scws-1.2.3\win32里的解决方案文件,里面包括了scws和zhparser,另外一个是scws的php扩展不用编译 zhparser是Postgresql中进行中文分词的常用扩展,网上的相关资料很多,安装的教程也不少,但大多数是linux的,并没有windows的安装介绍。原因有两个方面,一个是本身像这种数据库服务器一般都是linux系统的,另外一个比较致命,zhparser本身并没提供windows环境下的编译工程,连依赖库scws的readme里也建议在linux环境下使用,或者用cygwin或mingw一类工具。对于博主这种只使用windows环境(其实Postgresql也是刚接触),连makefile也搞不明白的真是头大。好在万变不离其中,编译环境只是工具,只要搞清楚个中原理(看代码),移植到windows+VS的环境应该也不是难事(当然这个也只是在轻量级的库下面适用)。下面进入正题: 干货在这里 ① 编译scws:由于 zhparser是基于scws(scws是简易中文分词系统的缩写,它的原理其实很简单,基于词典,将文本中的内容按照词典进行分词,提取关键字等。)做的分词,因此先要编译scws,网上下载下来的源码有vs2008的版本,因此,直接编译,后来出现头文件无法加入的错误,将相关文件编码方式修改成unicode解决(利用notepad++ 编码->转换为UTF-8编码)。 ② 编译zhparser:由于zhparser只提供了linux下面的makefile文件,想着用Mingw去编译,后来因为postgresql所在目录有空格,导致编译过程也失败。只好到vs2008里自建一个工程,建好工程后,首先把scws的头文件和库文件加进去,然后把postgresql的头文件和库文件加进去,设置项目属性为生成dll文件。 ③ 扩展安装:编译成功以后,在postgresql下面运行:create extension zhparser; 提示找不到control文件,在下载的源码文件夹里找到该文件,放到指定目录,再次运行sql,提示找不到dll文件,将dll文件放到指定目录,再运行,提示找不到zhprs_start函数,看来是dll没有正常explort出函数,修改源代码中的相关函数声明,再次运行后,显示成功。但zhparser源文件下其实还有很多文件,包括一个词典文件和ini配制文件,还不知道应该放在何处。 ④ zhparser运行环境配制:运行测试sql语句,发现并没有实现分词,想起来应该是词典位置不正确,到zhparser源码中去搜寻,发现如下代码,看来是放到tsearch_data目录下面,用同样的方法找到ini文件的目录,将它们都放进去,再次运行测试代码,得到正确结果。 测试代码: REATE EXTENSION zhparser; -- make test configuration using parser CREATE TEXT SEARCH CONFIGURATION testzhcfg (PARSER = zhparser); ALTER TEXT SEARCH CONFIGURATION testzhcfg ADD MAPPING FOR n,v,a,i,e,l WITH simple; select to_tsvector('testzhcfg','南京市长江大桥');
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不埋雷的探长

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值