大兴区网站建设,WordPress更该主题,直播平台排行榜前十名,舆情网站入口一、简介
Solr是一个高性能、基于Lucene的全文检索服务器。Solr对Lucene进行了扩展#xff0c;提供了比Lucene更为丰富的查询语言#xff0c;并实现了强大的全文检索功能、高亮显示、动态集群#xff0c;具有高度的可扩展性。同时从Solr 4.0版本开始#xff0c;支持SolrCl…一、简介
Solr是一个高性能、基于Lucene的全文检索服务器。Solr对Lucene进行了扩展提供了比Lucene更为丰富的查询语言并实现了强大的全文检索功能、高亮显示、动态集群具有高度的可扩展性。同时从Solr 4.0版本开始支持SolrCloud模式该模式下能够进行集中式的配置信息、近实时搜索、自动容错等功能
利用ZooKeeper作为协同服务启动时可以指定把Solr的相关配置文件上传ZooKeeper多机器共用。这些ZooKeeper中的配置不会再拿到本地缓存Solr直接读取ZooKeeper中的配置信息。配置文件的变动所有机器都可以感知到。自动容错SolrCloud对索引collection进行分片shard并对每个分片创建多个Replica。一个Replica出现异常并不会影响整个索引搜索服务每个Replica都可以独立对外提供服务。索引和查询时的自动负载均衡SolrCloud索引collection的多个Replica可以分布在多台机器上均衡索引和查询压力。如果索引和查询压力大可以通过扩展机器增加Replica来减缓压力。因此下面的介绍主要是围绕SolrCloud展开描述的。Solr索引数据存储方法有多种利用HDFS作为其索引文件的存储系统提供高可靠性、高性能、可伸缩、准实时的全文检索系统存放到本地磁盘提供了更加快速的索引和查询速度。
Solr集群方案SolrCloud由多个SolrServer进程组成如下图所示模块说明如下表所示。
名称说明ClientClient使用HTTP或HTTPS协议同Solr集群SolrCloud中的SolrServer进行通信进行分布式索引和分布式搜索操作。SolrServerSolrServer负责提供创建索引和全文检索等服务是Solr集群中的数据计算和处理单元。ZooKeeper集群ZooKeeper为Solr集群中各进程提供分布式协作服务。各SolrServer将自己的信息collection配置信息、SolrServer健康信息等注册到ZooKeeper中Client据此感知各个SolrServer的健康状态来决定索引和搜索请求的分发。
二、Solr基本概念
Collection在SolrCloud集群中逻辑意义上的完整的索引。它可以被划分为一个或者多个Shard它们使用相同的Config Set。Config SetSolr Core提供服务必须的一组配置文件。包括solrconfig.xml和managed-schema等。Core即Solr Core一个Solr实例中包含一个或者多个Solr Core每个Solr Core可以独立提供索引和查询功能每个Solr Core对应一个索引或者Collection的Shard的副本(replica)。ShardCollection的逻辑分片。每个Shard都包含一个或者多个replicas通过选举确定哪个是Leader。ReplicaShard的拷贝。一个Replica存在于Solr的一个Core中。Leader赢得选举的Shard replicas。当索引documents时SolrCloud会传递它们到此Shard对应的leaderleader再分发它们到Shard的全部replicas。ZooKeeper它在SolrCloud是必须的提供分布式锁、处理Leader选举等功能。
三、Solr原理
倒排序索引
传统的搜索方式正排序索引如下图所示是从关键点出发然后再通过关键点找到关键点代表的信息中能够满足搜索条件的特定信息即通过KEY寻找VALUE。通过正排序索引进行搜索就是从通过文档编号找关键词。 而SolrLucene的搜索则是采用了倒排序索引如下图所示的方式即通过VALUE找KEY。而在中文全文搜索中VALUE就是要搜索的关键词存放所有关键词的地方叫词典。KEY是文档标号列表通过文档标号列表可以找到出现过要搜索关键词–VALUE的文档具体如下面的图所示通过倒排序索引进行搜索就是通过关键词查询相对应的文档编号再通过文档编号找文档类似于查字典或通过查书目录查指定页码书的内容。
分布式索引操作流程
Solr分布式索引操作流程如下图所示。 操作流程说明如下
当Client发起一次文档索引请求时首先将从ZooKeeper集群中获取SolrCloud中SolrServer的集群信息根据请求中的collection信息获取任意一台包含该collection信息的SolrServerClient把文档索引请求发送给SolrServer中该collection对应shard中的一个Replica进行处理如果该Replica不是Leader Replica则该Replica会把文档索引请求再转发给和自己相同shard中相对应的Leader Replica该Leader Replica在本地完成文档的索引后会再把文档索引请求路由给本Shard中的其他Replica进行处理如果该文档索引的目标shard并不是本次请求的Shard那么该Shard的Leader Replica会将文档索引请求再次转发给目标Shard的Leader Replica目标Shard的Leader Replica在本地完成文档的索引后会再把文档索引请求再次路由给本Shard的其他Replica进行处理。
分布式搜索操作流程
Solr分布式搜索操作流程如下图所示。 操作流程说明如下
当Client发起一次搜索请求时Client首先将通过ZooKeeper会获取到SolrServer服务器集群信息并随机选取一个含有该collection的SolrServerClient把搜索请求发送到该Collection在SolrServer上相对应Shard中的任意一个Replica可以不为Leader Replica进行处理该Replica再根据查询索引的方式启动分布式查询基于Collection的Shard个数在上图中为2个Shard1和Shard2把查询转换为多个子查询并把每个子查询分发到对应Shard的任意一个Replica可以不为Leader Replica中进行处理每个子查询完成查询操作后并查询结果返回首次收到查询请求的Replica收到各个子查询的查询结果后对各个查询结果进行合并处理然后把最终的查询结果返回给Client。
四、Solr和HDFS的关系
Solr是Apache基金会下的项目也是Apache Hadoop项目生态系统中重要的一员Solr可利用HDFS作为其索引文件存储系统。Solr位于结构化存储层HDFS为Solr提供了高可靠性的存储支持。Solr中的所有索引数据文件都可以存储在HDFS文件系统上。
五、Solr和HBase的关系
HBase提供海量数据存储功能是一种构建在HDFS上的分布式、面向列的存储系统。Solr索引HBase数据是将HBase数据写到HDFS的同时Solr建立相应的HBase索引数据。其中索引id与HBase数据的rowkey对应保证每条索引数据与HBase数据的唯一实现HBase数据的全文检索。