solr基本概念

开发环境说明:

ambari v2.6.1

Solr v5.5.5

笔者使用的ambari来自动化安装的Solr


一、什么是Solr,及其主要特点

其实简单的说,Solr是一个基于Apache Lucene 项目的开源企业级搜索平台,是用JAVA编写的、运行在Servlet容器中的一个独立的全文搜索服务器(换句话说就是个JAVA-WEB APP),并具有类似REST的HTTP/XML和JSON的API。

主要功能包括全文检索,高亮命中,分面搜索(faceted search),近实时索引,动态集群,数据库集成,富文本索引,空间搜索;通过提供分布式索引,复制,负载均衡查询,自动故障转移和恢复,集中配置等功能实现高可用,可伸缩和可容错。

  • Advanced Full-Text Search Capabilities(高级全文搜索能力)
  • Optimized for High Volume Traffic(大数据性能优化)
  • Standards Based Open Interfaces - XML, JSON and HTTP(标准的XML,JSON,HTTP接口)
  • Comprehensive Administration Interfaces(综合管理界面)
  • Easy Monitoring(易于监控)
  • Highly Scalable and Fault Tolerant(高可扩展和容错力)
  • Flexible and Adaptable with easy configuration(通过简单配置带来灵活性和适应性)
  • Near Real-Time Indexing(近乎实时的索引)
  • Extensible Plugin Architecture(可扩展的插件构架)

扩展:Solr和Lucene之间的关系

  • Solr是Lucene的一个子项目,它在Lucene的基础上进行包装,成为一个企业级搜索服务器开发框架。
  • Solr与Lucene的主要区别体现在:
  • Solr更加贴近实际应用,是Lucene在面向企业搜索服务领域的扩展;
  • Solr的缓存等机制使全文检索获得性能上的提升;通过配置文件的开发使得Solr具有良好的扩展性;
  • Solr提供了用户友好的管理界面与查询结果界面。

简单讲:Solr使用Lucene并且扩展了它!

二、Solr目录结构

以使用ambari安装的solr为例,源码路径: /usr/lib/ambari-infra-solr

三、重要的配置文件

Solr5的主要配置文件有 solrconfig.xmlmanaged-schema,另外一些还有 solr.xml, 数据导入配置, ZooKeeper配置等。这里先提示记录一下

四、SolrCloud概念

SolrCloud(solr 云)是Solr提供的分布式搜索方案,当你需要大规模,容错,分布式索引和检索能力时使用 SolrCloud。当一个系统的索引数据量少的时候是不需要使用SolrCloud的,当索引量很大,搜索请求并发很高,这时需要使用SolrCloud来满足这些需求。

SolrCloud是基于Solr和Zookeeper的分布式搜索方案,它的主要思想是使用Zookeeper作为集群的配置信息中心。该模式下有Cluster,Node,Collection,Shard,LeaderCore,ReplicationCore等重要概念。

1. Cluster集群:

Cluster是一组Solr节点,逻辑上作为一个单元进行管理,整个集群必须使用同一套schema和SolrConfig。

2. Node节点:

一个运行Solr的JVM实例。

3. Collection:

在SolrCloud集群中逻辑意义上的完整的索引,常常被划分为一个或多个Shard,这些Shard使用相同的Config Set,如果Shard数超过一个,那么索引方案就是分布式索引。SolrCloud允许客户端用户通过Collection名称引用它,这样用户不需要关心分布式检索时需要使用的和Shard相关参数。

4. Core:

也就是Solr Core,一个Solr中包含一个或者多个Solr Core,每个Solr Core可以独立提供索引和查询功能,Solr Core的提出是为了增加管理灵活性和共用资源。SolrCloud中使用的配置是在Zookeeper中的,而传统的Solr Core的配置文件是在磁盘上的配置目录中。

5. Config Set:

Solr Core提供服务必须的一组配置文件,每个Config Set有一个名字。最小需要包括solrconfig.xml和schema.xml,除此之外,依据这两个文件的配置内容,可能还需要包含其它文件,如中文索引需要的词库文件。Config Set存储在Zookeeper中,可以重新上传或者使用upconfig命令进行更新,可使用Solr的启动参数bootstrap_confdir进行初始化或更新。

6. Shard分片:

Collection的逻辑分片。每个Shard被分成一个或者多个replicas,通过选举确定哪个是Leader。

7. Replica:

Shard的一个拷贝。每个Replica存在于Solr的一个Core中。换句话说一个Solr Core对应着一个Replica,如一个命名为“test”的collection以numShards=1创建,并且指定replicationFact为2,这会产生2个replicas,也就是对应会有2个Core,分别存储在不同的机器或者Solr实例上,其中一个会被命名为testshard1replica1,另一个命名为testshard1replica2,它们中的一个会被选举为Leader。

8. Leader:

赢得选举的Shard replicas,每个Shard有多个Replicas,这几个Replicas需要选举来确定一个Leader。选举可以发生在任何时间,但是通常他们仅在某个Solr实例发生故障时才会触发。当进行索引操作时,SolrCloud会将索引操作请求传到此Shard对应的leader,leader再分发它们到全部Shard的replicas。

9. Zookeeper:

Zookeeper提供分布式锁功能,这对SolrCloud是必须的,主要负责处理Leader的选举。Solr可以以内嵌的Zookeeper运行,也可以使用独立的Zookeeper,并且Solr官方建议最好有3个以上的主机。

zookeeper的主要作用有:

  • 集中配置存储以及管理。
  • 集群状态改变时进行监控以及通知。
  • shard leader的选举。
  • 自动容错
  • 近实时搜索
  • 查询时自动负载均衡

五、Collection逻辑图

解释:

  • 从上图可以看到,有一个collection,被分为两个shard,每个shard分为三个replica,其中每个shard从自己的三个replica选择一个作为Leader。
  • 每个shard的replica被分别存储在三台不同的机器(Solr实例)中,这样的目的是容灾处理,提高可用性。如果有一个机器挂掉之后,因为每个shard在别的机器上有复制品,所以能保证整个数据的可用,这是Solrcloud就会在还存在的replica中重新选举一个作为这个shard的Leader。

本文分享自微信公众号 - 大数据实战演练(gh_f942bfc92d26),作者:CREATE_17

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-12-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 如何将Hive与HBase整合联用

    之前学习 HBase 就有疑惑,HBase 虽然可以存储数亿或数十亿行数据,但是对于数据分析来说,不太友好,只提供了简单的基于 Key 值的快速查询能力,没法进...

    create17
  • Elasticsearch 6.x 的基本概念及特点

    Lucene:简单来说,就是一个 jar 包,里面包含了封装好的各种建立倒排索引,以及进行搜索的代码,包含各种算法,我们用java开发的时候,引入 lucene...

    create17
  • HBase二次开发之搭建HBase调试环境,如何远程debug HBase源代码

    之前的文章也提到过,最近工作中需要对HBase进行二次开发(参照HBase的AES加密方法,为HBase增加SMS4数据加密类型)。研究了两天,终于将开发流程想...

    create17
  • 搜索正在遍及世界

    大部分工作人员刚刚从Lucene Revolution社区回来。与Lucene/Solr社区的精英们一起参加活动实在是一次让人无法忘怀的经历。我们可以越来越明显...

    zaking
  • (一)Solr介绍

    qubianzhong
  • Python 日期时间处理

    开发过程中最常用的时间处理就是获取时间戳,获取当前日期,或者时间戳,日期互转,做个总结,免得总找不着。

    py3study
  • 29.opengl高级光照-视差贴图

    上一篇法线贴图使用了法线纹理,通过法线的变化来控制漫反射和镜面反射的强度,加强了纹理渲染的层次感,明暗渐变更符合实际情况。视差贴图在法线贴图之上,增加物体表面的...

    用户1068165
  • 28.opengl高级光照-法线贴图

    为了增加渲染的真实感,图片纹理对每个片段增加法线,渲染时根据不同的法线计算独立的光照效果。

    用户1068165
  • 利用Sqoop实现HDFS的数据与MySQL数据的互导

    注意: 查询语句必须包含where条件,即使不需要where条件,也需要写上"where $CONDITIONS"来表示没有select语句没有where条件

    CoderJed
  • Torch7模型训练

    Torch7搭建卷积神经网络详细教程已经详细的介绍啦Module模块,这里再次基础上再给出一些上Container、 Transfer Functions La...

    昱良

扫码关注云+社区

领取腾讯云代金券