ElasticSearch
是一个实时分布式搜索和分析引擎;
是基于Apache Lucene 的开源搜索引擎,Lucene可以被认为迄今为止最先进,性能最好的,功能最全的搜索引擎库;
典型使用案例:
- Github使用Es搜索20tB的数据,包含13亿的文件,和1300亿行的代码
Lucene缺点:
- 索引数据如果太多就不行(索引库和应用所在同一个服务器,共同占用硬盘,公用空间少);
- 不支持集群环境索引数据的同步(不支持大型项目);
- 只能在java项目中使用,并且要以jar包的方式直接集成到项目中;
- 非常复杂,你需要深入了解检索的先关知识来理解它是如何工作的;
Slr
是Apache下的一个顶级开源项目,采用java开发,基于Lucene的全文搜索服务器。Solr提供了比Lucene更为丰富的查询语言,同事实现了可配置,可扩展,并对索引,搜索性能进行了优化。
Solr可以独立运行,运行在Jetty、Tomcat等这些Servlet容器中,Solr 索引的实现方法很简单,用 POST 方法向 Solr 服务器发送一个描述 Field 及其内容的 XML 文档,Solr根据xml文档添加、删除、更新索引 。Solr 搜索只需要发送 HTTP GET 请求,然后对 Solr 返回Xml、json等格式的查询结果进行解析,组织页面布局。Solr不提供构建UI的功能,Solr提供了一个管理界面,通过管理界面可以查询Solr的配置和运行情况。
solr是基于lucene开发企业级搜索服务器,实际上就是封装了lucene。
Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的文件,生成索引;也可以通过提出查找请求,并得到返回结果。
Solr索引创建过程原理
https://blog.csdn.net/weixin_42257250/article/details/86999040?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2~aggregatepage~first_rank_ecpm_v1~rank_v31_ecpm-1-86999040.pc_agg_new_rank&utm_term=solr+%E5%BB%BA%E7%AB%8B%E7%B4%A2%E5%BC%95%E9%98%BB%E5%A1%9E&spm=1000.2123.3001.4430
Elasticsearch和Solr比较
- 二者都是基于Lucene封装的,ES支持RestFul请求,Solr是WebService的请求
- ES自身支持集群,Solr要借助Zookeeper来集群,且配置复杂(ES解压即可用, Solr需要配置)
- ES比Solr更快
- 当使用索引时, solr会发生io阻塞
- elastic的效率在传统项目下一般有50倍的提升
- Solr支持更多格式的数据, json, xml, csv, Elastic只支持json
- Solr查询快, 但是更新索引时慢(如插入和删除慢), Elastic查询相对慢, 但是实时性查询快, 用于facebook新浪等搜索
- solr是传统搜索应用的解决方案, elastic适用于新兴的实时搜索应用
- solr没有query DSL 高级查询,es有Query DSL ,能够支持更加高级和复杂的查询语法,而且还可以以此扩展实现类sql语法的的查询;
- solr不支持可扩展性,es支持插件开发模式,提供丰富的开源插件库