`

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路由在写入的时候指定了分片,所以可以自由的增加分片

分享到:
评论

相关推荐

    blacklight:Blacklight为任何Solr(http:lucene.apache.orgsolr)索引提供发现接口

    安装将Blacklight添加到您的Gemfile : gem "blacklight" 运行安装生成器,它将复制一些初始模板,迁移,路由和配置: rails generate blacklight:install文档,信息和支持依存关系Ruby 2.2+ 邦德勒Rails 5.1+贡献...

    Solr构建分布式搜索+面试题讲解

    本课程共分26节,内容包括solr概述,文档的导入删除和修改,修改大启动时间和默认时区,主要配置文件详解,solrcore详解与使用,mysql数据导入索引库,定时任务,中文分词,solrcloud创建和使用,路由规则,负载均衡...

    sails-solr:已弃用 - 用于 Sails.js 和 Waterline 的 Solr 适配器

    特征对接口支持自动完成作为模型方法和阴影路由操作的和拼写检查以分层导航(范围和面过滤器)作为模型方法和阴影路径操作的目录Solr Config API完整的 solrconfig 管理添加、更新 SearchComponents 添加、更新 ...

    metaproxy-SUB:SUBGöttingen的超代理配置

    dspace-route.xml:Metaproxy路由配置 dspace.pqf:将SRU索引名称映射到Solr索引名称 dspace-pql-to-solr.xsl:将Z39.50索引号映射到Solr索引名称 dspace-to-marc21.xsl:将具有DSpace扩展的DC字段(然后是某些字段...

    Laravel-Solarium:使用 Solarium 的 Laravel 框架包

    包括用于查询站点搜索核心的路由(可配置 URI)和控制器。 包括示例站点搜索结果视图,您可以根据需要使用它,但您很可能只想使用部分视图... 您可以包含在布局标题中的站点搜索表单的部分视图您可以从自定义搜索...

    毕业设计之SpringCloud-B2C电子商务平台服务端.zip

    利用服务网关(Zuul)实现动态路由,利用ZuulFilter进行权限控制 5).完成商品分类表,商品表,订单表等相关数据库表结构设计 6)部署solr搜索引擎,录入数据整合到项目中进行全文搜索 7).完成用户认证模块,密码加密...

    curator:Rails API引擎,通过更多SQL驱动方法来替换Fedora

    当前,所有数据模型均已使用基本路由和json序列化程序创建去做眼镜设置Rubocop设置数据库清理程序设置Solr包装器固定装置设置FactoryBot设置录像机规格单位规格功能规格整合发展创建索引功能(Solr)创建其他...

    SpringCloud-B2C电子商务平台App

    (service-user),管理员服务...完成商品分类表,商品表,订单表等相关数据库表结构设计 6)部署solr搜索引擎,录入数据整合到项目中进行全文搜索 7).完成用户认证模块,密码加密,手机短信、邮箱验证码(Freemarker)

    GeoPath-Clustering:聚集路径非常相似的地理路径

    GeoPath聚类Memex路由集群项目正在尝试提供工具和技术,以便能够将某些Memex数据作为路由格式进行探索。 路线被定义为通过时间将对象移动到不同的地理位置。 该项目的主要目标之一是开发一种算法,该算法能够对沿...

    大型分布式网站架构与实践

     垂直化的搜索引擎在分布式系统中的使用,包括搜索引擎的基本原理、Lucene详细的使用介绍,以及基于Lucene的开源搜索引擎工具Solr的使用。  2.1 分布式缓存 60  2.1.1 memcache简介及安装 60  2.1.2 memcache ...

    百度云盘 pdf《大数据架构和算法实现之路:电商系统的技术实战》百度云盘-带标签目录

    8.3.1 Solr 路由的实现.. ......... . ...... 271 8.3.2 Elasticsearch 路由的实现 ……· 278 第 9 章 方案设计和技术选型: 搜索提示………….. ..... 283 9.1 问题分析 ……..... . ..….............… 283 ...

    杂项:我认为有趣的任何事情

    ) 的新导航和路由系统) 的实体框架) (下一步是Vercel) (通用取证设备) ui) (使用Tailwind CSS,React和Capacitor构建iOS,Android和Progressive Web App的起点) 在构建时将Tailwind的魔力与css-in-js的...

    单点登录源码

    服务网关,对外暴露统一规范的接口和包装响应结果,包括各个子系统的交互接口、对外开放接口、开发加密接口、接口文档等服务,可在该模块支持验签、鉴权、路由、限流、监控、容错、日志等功能。示例图: ![API网关]...

Global site tag (gtag.js) - Google Analytics