【Solr是什么】
- 开源搜索平台,用于构建搜索应用程序
- 企业级的,快速的和高度可扩展的
- Solr构建的应用程序非常复杂,可提供高性能
- 一种非关系数据存储和处理技术
- Solr是一个可扩展的,可部署,搜索/存储引擎,优化搜索大量以文本为中心的数据
- 它建立在Lucene(全文搜索引擎)之上
【特点】
- Restful APIs − 要与Solr通信,并非一定需要有Java编程技能
- 全文搜索
- 企业准备
- 灵活和可扩展
- NoSQL数据库
- 管理界面 - Solr提供了一个易于使用,用户友好,功能强大的用户界面
- 高度可扩展,在使用Solr与Hadoop时,我们可以通过添加副本来扩展其容量
- 以文本为中心并按相关性排序
【Solr架构】
- 请求处理程序 - 发送到Apache Solr的请求由这些请求处理程序处理。
- 搜索组件 - 搜索组件是Apache Solr中提供的搜索类型(功能)。
- 查询解析器 − Apache Solr查询解析器解析传递给Solr的查询,并验证查询的语法是否有错误。解析查询后,将它们转换为Lucene理解的格式。
- 响应写入器 - Apache Solr中的响应写入器是为用户查询生成格式化输出的组件。 Solr支持XML,JSON,CSV等响应格式。对每种类型的响应都有不同的响应写入。
- 分析器/分词器 - Lucene以令牌的形式识别数据。
- 更新请求处理器 - 每当向Apache Solr发送更新请求时,请求都通过一组称为更新请求处理器的插件(签名,日志记录,索引)运行。这个处理器负责修改,例如删除字段,添加字段等。
【sorl与Elasticsearch的比较】
1、sorl
优点:
- 1、Solr有一个更大、更成熟的用户、开发和贡献者社区。
- 2、支持添加多种格式的索引,如:HTML、PDF、微软 Office 系列软件格式以及 JSON、XML、CSV 等纯文本格式。
- 3、Solr比较成熟、稳定。
- 4、不考虑建索引的同时进行搜索,速度更快。
缺点
- 建立索引时,搜索效率下降,实时索引搜索效率不高。
2、ElasticSearch
优点
- 1、Elasticsearch是分布式的。不需要其他组件,分发是实时的,被叫做”Push replication”。
- 2、Elasticsearch 完全支持 Apache Lucene 的接近实时的搜索。
- 3、处理多租户(multitenancy)不需要特殊配置,而Solr则需要更多的高级设置。
- 4、Elasticsearch 采用 Gateway 的概念,使得完备份更加简单。
- 5、各节点组成对等的网络结构,某些节点出现故障时会自动分配其他节点代替其进行工作。
缺点
- 1、还不够自动,不适合当前新的Index Warmup API
3、总结
- 1、当单纯的对已有数据进行搜索时,Solr更快。
- 2、当实时建立索引时, Solr会产生io阻塞,查询性能较差, Elasticsearch具有明显的优势。
- 3、随着数据量的增加,Solr的搜索效率会变得更低,而Elasticsearch却没有明显的变化。
- 4、Solr的架构不适合实时搜索的应用。
- 5、Solr 支持更多格式的数据,而 Elasticsearch 仅支持json文件格式
- 6、Solr 在传统的搜索应用中表现好于 Elasticsearch,但在处理实时搜索应用时效率明显低于 Elasticsearch
- 7、Solr 是传统搜索应用的有力解决方案,但 Elasticsearch 更适用于新兴的实时搜索应用
【搜索引擎基础】
1、搜索引擎组件
Web爬虫 - Web爬虫也称为蜘蛛或机器人。 它是一个收集网络信息的软件组件。
数据库 - Web上的所有信息都存储在数据库中。它们包含大量的Web资源。
搜索接口 - 此组件是用户和数据库之间的接口。它帮助用户搜索数据库。
2、如何工作的
- 1 获取原始内容 任何搜索应用程序的第一步是收集要进行搜索的目标内容。
- 2 构建文档 从原始内容构建文档,让搜索应用程序可以很容易地理解和解释。
- 3 分析文档 在索引开始之前,将对文档进行分析。
- 4 索引文档 当文档被构建和分析后,下一步是对它们建立索引,以便可以基于特定键而不是文档的全部内容来检索该文档。索引类似于在书开始页或末尾处的目录索引,其中常见单词以其页码显示,使得这些单词可以快速跟踪,而不是搜索整本书。
- 5 用于搜索的用户接口 当索引数据库就绪,应用程序可以执行搜索操作。 为了帮助用户进行搜索,应用必须提供用户接口,用户可以在其中输入文本并启动搜索过程
- 6 构建查询 当用户做出搜索文本的请求,应用程序应该使用该文本来准备查询对象,然后可以使用该查询对象来查询索引数据库以获得相关的细节。
- 7 搜索查询 使用查询对象,检查索引数据库以获取相关详细信息和内容文档。
- 8 渲染结果 当收到所需的结果,应用程序应决定如何使用其用户界面向用户显示结果。