`

solr 路由(转)

    博客分类:
  • solr
 
阅读更多

转自:http://doc.okbase.net/172871/archive/245123.html

solrcloud的官方文档有对路由的简短介绍,但是不够详细和深入。solrcloud有两种路由策略,一种是implicit(个人称之为手动路由) ,一种是compositeId(个人称之为自动路由);在创建collection的时候,如果没有指定路由方式,指定了numShards个数,默认是自动路由,即compositeId路由;反之是implicit路由。在solrcloud的admin界面上,能通过collection的state.json看得到collection的路由策略

1、compositeId路由

    使用compositeId路由,在创建collection的时候必须要指定numShards(分片数)compositeId是一种不可扩展的路由策略。

1.1、compositeId路由原理

在创建collection的时候,compositeId路由确定的分片数(numShards),solr给每一片分配一个32bit hash范围。例如numShards=4,32位无符号范围是0-ffffffff(4294967295),那么每片的范围是


Shard3 : 0-1073741823
Shard4 : 1073741824-2147483647

Shard1 : 2147483648-3221225471
Shard2 : 3221225472-4294967295

在路由document的时候,compositeId路由会先计算document id的(例如document的unikey)murmurhash3 hash值,然后根据document id的hash值确定文档路由到那个分片上。例如

document id 值为:abc

通过murmurhash3 hash在32bit上的值为:1073741836

通过比较,1073741836落在Shard4范围内,即该文档写入到Shard4中

compositeId路由不仅限于通过document id计算murmurhash3 hash来确定分片;还可以通过正则表达式来确定分片,例如:

shard_key!document_id

!号前面是分片的key,这个key不一定非得是shard的名字,保证solr按照这个key计算一致就行;!号后面是文档id

shard_key 16 bit hash,取document_id 16bit hash拼接成一个32bit hash,用于确定文档的路由。

例如,你需要为不同的用户分shard,你可能会使用用户的名字或者ID作为一个前缀。比如你的用户是“juanpi”,如果你有一个文档的ID是“12345”,把前缀插入到文档的id字段中变成:“juanpi!12345”,在这里感叹号是一个分割符号,这里的“juanpi”定义了这个文档会指向一个特定的shard。

1.2、compositeId路由查询

然后在查询的时候,需要把这个前缀包含到_route_参数里面(比如:q=solr&_route_=juanpi!)使查询指向指定的shard。在某些情况下;这样操作能提升查询的性能,因为它省掉了需要在所有shard上发起http查询请求。

2、implicit路由

2.1、implicit路由原理

该路由方式需要外部指定document具体落在路由到哪个Shard,这与compositeId路由方式索引可大致均匀分布在每个shard上不同;implicit路由是在外部控制,如果控制不好有可能分布不均匀。

在创建collection的时候,不指定shadNume,或者明确指出使用implicit路由,也可以指定使用某一个field(router.field)路由,这个参数定义了通过使用文档中的一个字段来确定文档是属于哪个shard的。但是,如果在一个文档中指定的字段没有值得话,这个文档Solr会拒绝处理。同时也可以使用_route_参数来指定一个特定的shard。

也可以使用solrj指定

利用solrJ新建索引时,需要在代码中指定索引具体落在哪个shard上,添加代码:

doc.addField("_route_","shard_x");

同时在schema.xml添加字段

<field name="_route_" type="string"/>

2.2、implicit路由查询

由于创建collection是例如如下方式

http://localhost:8983/solr/admin/collections?action=CREATE&name=testimplicit&router.name=implicit&shards=shard1,shard2,shard3

而添加document的时候,指定写入到shard1,shard2,shard3中的某一片,例如

doc.addField("_route_","shard3");

查询的时候到某个分片查询即可

 

3、扩展

3.1、compositeId路由方式扩展

compositeId路由,只能通过手动分裂某一片成两片,然后删除原来片的方式扩展

在分裂的过程中,原分片的数据会大致均匀分成2份,复制到新生成的两个分片中

例如,原分片1万数据,分裂成两片后,每片大致5千数据

然后再手动删除原来(1万数据)的那片

3.2、implicit路由方式扩张

由于implicit路由在写入的时候指定了分片,所以可以自由的增加分片

分享到:
评论

相关推荐

    solr服务器_solr_

    7. **CloudSolrClient**:在SolrCloud模式下,应用通常使用CloudSolrClient与Solr集群通信,它可以自动处理数据路由和复制,确保高可用性和数据一致性。 8. **Faceting**:Solr提供分面搜索功能,允许用户通过分类...

    solr-4.10.3.rar

    6. **性能优化**:Solr提供了多种优化策略,如利用NRT(Near Real Time)机制实现快速搜索更新,通过Shard路由策略分发查询负载,以及通过缓存机制提高响应速度。 7. **扩展性**:Solr支持多种插件机制,可以扩展其...

    solr入门java工程

    在SolrCloud中,文档的添加和更新会自动路由到正确的片段,并且查询会合并所有片段的结果。 在学习和使用这个"solr入门java工程"时,你需要理解以下关键点: 1. Solr的基本概念和功能,如索引、查询、分面搜索等。...

    全文搜索技术solr Demo

    多个Solr节点组成集群,数据分片存储,查询请求自动路由至相应节点,确保高可用性和性能。 总结,"全文搜索技术solr Demo"涵盖了Solr的基本概念、安装配置、数据导入、查询操作以及分布式搜索等内容。通过这个Demo...

    solr6.6.0源码

    5. **Cloud模式**:在ZooKeeper的协调下,Solr支持云部署,实现动态集群管理和数据路由。 二、Solr配置 Solr的配置主要通过`solrconfig.xml`和`schema.xml`两个文件进行。`solrconfig.xml`定义了Solr的行为,如请求...

    solr 的使用及安装

    3. **数据路由与复制**:SolrCloud 自动处理数据分片和副本,确保高可用性和容错性。 总结,Solr 是一个强大的全文搜索引擎,适用于构建高性能的搜索应用。从安装、创建核心到索引数据、查询优化,每个环节都有详细...

    solr实现的搜索引擎

    数据分布和查询路由由ZooKeeper自动管理,实现水平扩展。 7. **优化与维护** Solr提供实时添加、删除和更新文档的能力,但为了提高性能和减少资源消耗,定期进行索引优化(即合并小段)是必要的。另外,监控Solr的...

    solrcore 添加修改控制

    当某个节点上的SolrCore出现问题时,集群应能自动将请求路由到其他健康的节点,保证服务的连续性。 10. **版本控制** 使用版本控制系统(如Git)管理SolrCore的配置文件,可以帮助跟踪改动历史,便于回滚到之前的...

    solr集群搭建

    8. **负载均衡与路由**:SolrCloud会自动处理请求的路由和数据分片,但你可以通过配置`router.field`来指定如何将文档分发到不同的分片。 9. **数据导入**:使用Solr的数据导入处理程序(DIH)或者SolrJ库将数据...

    solr 分布式参考

    Solr,全称为Apache Solr,是一款开源的企业级搜索引擎,由Apache软件基金会开发。它能够高效、快速地处理大量的文本数据,并提供全文检索、 faceted search(分面搜索)、hit highlighting(高亮显示搜索结果)等...

    最新版linux solr-8.5.2.tgz

    3. 文档路由:根据文档 ID 或自定义规则,将文档分配到特定的分片。 4. 自动复制:保持分片之间的数据同步,确保高可用性。 五、监控与优化 1. 日志监控:通过查看日志文件,了解 Solr 的运行状态,发现潜在问题。 ...

    solr4.9+tomcat+zookeeper集群

    3. **客户端路由**: 客户端查询请求通过Zookeeper找到相应的分片,实现负载均衡。 四、Solr 4.9集群搭建步骤 1. **安装Zookeeper**: 设置Zookeeper集群,确保集群稳定运行。 2. **部署Tomcat**: 在每个节点上安装...

    solr-cell-4.5.0.zip

    标题中的"solr-cell-4.5.0.zip"指的是Apache Solr的一个特定版本,4.5.0,其中"cell"可能指的是Solr的Tika解析器模块。Solr是Apache Lucene项目的一部分,是一个流行的开源全文搜索引擎服务器,允许用户通过HTTP接口...

    java solr开发

    - **路由与复制**:根据Sharding策略,查询和更新请求会被正确地路由到相应的Solr节点。 4. **Solr开发** - **API使用**:Solr提供了HTTP RESTful API,可以使用Java客户端库或者直接发送HTTP请求进行交互。 - *...

    solr搜索引擎支持分页

    在SolrCloud模式下,Solr支持分布式搜索和分片,这意味着分页请求会被自动路由到正确的分片上。每个分片都会返回一部分结果,然后由SolrCloud合并并返回给客户端。这种机制确保了在分布式环境中的正确分页。 7. ...

    solr_api

    - **路由和复制**:通过`shard`参数指定查询的分片,`distrib`参数控制是否在所有分片上执行查询。 8. **配置管理** - **ZooKeeper**:在SolrCloud模式下,ZooKeeper集群用于存储和同步Solr的配置信息。 - **...

    solr技术文solr技术文

    ZooKeeper作为协调服务,管理集群状态和请求路由。 6. **复制和故障转移**:Solr有实时复制功能,可以将一个索引副本分发到其他节点,确保数据安全。当主节点故障时,可以无缝切换到备份节点,保证服务连续性。 7....

    Apache Solr最新版任意文件读取0day1

    由于Solr的路由结构相对固定,可以通过严格过滤URL来防止恶意请求。然而,由于核心(core)或集合(collection)名称在URL中,且在生产环境中通常是用户自定义的,如果规则编写者仅考虑默认的示例(example)配置,...

    solr所需配置文件

    比如,它定义了ZooKeeper的位置、Shard的数量、Replication Factor(副本因子)以及路由策略等。 6. **updateRequestProcessorChain.xml**: 这个文件定义了处理索引更新请求的一系列处理器。处理器可以用于数据...

    spring-solr.zip

    同时,Repository接口中的操作会自动路由到正确的Solr服务器,确保数据的一致性。 在操作代码示例中,可能会包括以下内容: 1. 创建Solr实体类:这些类通常会使用`@Indexed`和`@Field`注解来标记属性,使它们能够...

Global site tag (gtag.js) - Google Analytics