Solr router 路由介绍_router:implicit-程序员宅基地

技术标签: Solr  

目录

1、compositeId路由

1.1、compositeId路由原理

1.2、compositeId路由查询

2、implicit路由

2.1、implicit路由原理

2.2、implicit路由查询

3、扩展

3.1、compositeId路由方式扩展

3.2、implicit路由方式扩张


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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/zhangshenghang/article/details/103682684

智能推荐

实现一款高可用的 TCP 数据传输服务器(Java版)-程序员宅基地

文章浏览阅读1.5k次。1.netty能做什么首先netty是一款高性能、封装性良好且灵活、基于NIO(真·非阻塞IO)的开源框架。可以用来手写web服务器、TCP服务器等,支持的协议丰富,如:常用的HTTP/HTTPS/WEBSOCKET,并且提供的大量的方法,十分灵活,可以根据自己的需求量身DIV一款服务器。用netty编写TCP的服务器/客户端1.可以自己设计数据传输协议如下面这样:2.可以自定义编码规则和解码规则..._tcp数据转发服务器

linux下解压bin文件怎么打开方式,安卓手机如何打开.bin文件?-程序员宅基地

文章浏览阅读4k次。01安卓手机打开bin文件的方法是更改后缀名,将后缀名修改为.apk即可,安卓是一种基于Linux内核(不包含GNU组件)的自由及开放源代码的操作系统。bin后缀的是一种二进制文件,它的用途是根据用户系统或者电脑内的应用而定的,这是文件格式binary的缩写。二进制(binary)在数学和数字电路中指以2为基数的记数系统,以2为基数代表系统是二进位制的。在安卓手机上打开bin文件,只需要将bin文..._安卓手机如何打开bin文件

Rancher简介和部署_rancher部署-程序员宅基地

文章浏览阅读5.5k次。Rancher是一套容器管理平台,它可以帮助组织在生产环境中轻松快捷的部署和管理容器。 Rancher可以轻松地管理各种环境的Kubernetes,满足IT需求并为DevOps团队提供支持。Kubernetes不仅已经成为的容器编排标准,它也正在迅速成为各类云和虚拟化厂商提供的标准基础架构。Rancher用户可以选择使用Rancher Kubernetes Engine(RKE)创建Kubernetes集群,也可以使用GKE,AKS和EKS等云Kubernetes服务。 Rancher用户还可以导入和管理现_rancher部署

Oracle 11g r2全外连接优化执行计划(二)-程序员宅基地

文章浏览阅读80次。在11.2中,Oracle对于全外连接的执行计划进行了优化。这篇介绍新增的两个相关的HINT。Oracle在推出了新的执行计划的同时,还提供了两个控制这个执行计划的提示NATIVE_FULL_OUTER_JOIN和NO_NATIVE_FULL_OUTER_JOIN。这两个HINT的使用十分简单,不需要其他的任何参数。下面继续上一篇文章的例子:SQL> SELECT /*..._oracle 执行计划union

python写入数据到csv或xlsx文件的3种方法_dt = pd.dataframe(list1, columns=columns) dt.to_ex-程序员宅基地

文章浏览阅读9.5k次。文本存入csv文件中_dt = pd.dataframe(list1, columns=columns) dt.to_excel("result_xlsx.xlsx", in

catia数控加工01_catia编程论坛-程序员宅基地

文章浏览阅读645次。学习视频。_catia编程论坛

随便推点

idea配置maven-程序员宅基地

文章浏览阅读462次,点赞14次,收藏5次。这里搜索localRepository,然后添加自己想设置的本地仓库地址(就是一个文件夹),尽量设置在c盘之外,后面的依赖越来越多c盘可能会爆满。在File-》New Projects Setup-》Settings for New Projects下设置maven。只设置上述内容会发现,每次新创建的项目加载还是很慢【坑!】,所以还是需要配置下面的内容。maven的setting.xml文件放在安装的maven的conf目录下。设置两个东西,一个是阿里的镜像,另一个是本地仓库。

使用QProxyStyle自定义QMdiSubWindow样式_subwindow 重绘按钮 qproxystyle-程序员宅基地

文章浏览阅读1.8k次。一般Qt中使用自定义样式时,编写一个QSS文件,然后根据控件类、选择器等改变界面样式即可,但有些界面组件通过qss文件自定义样式时却不太如人意,如QMdiSubWindow的标题栏样式,如果通过qss文件去修改是这个样子QMdiSubWindow:title{ background: lightgray;}这时候就可以通过继承QProxyStyle编写更高级的自定义样式。通过QProxyStyle自定义样式主要有几个函数需要覆写:virtual void drawComp_subwindow 重绘按钮 qproxystyle

秒杀蓝牙!华为“星闪”到底是什么?_华为星闪联盟-程序员宅基地

文章浏览阅读590次,点赞18次,收藏10次。大会上余总对星闪一笔带过,众所周知,越不重要出现越少,出现越少越不想让别人知道,越不想让别人知道越机密,越机密越重要,所以越不重要越重要。吃了这次亏后,华为决定自己成立类似蓝牙技术联盟的无线技术组织,名字为绿牙联盟,这就是星闪联盟(Sparklink)的前身。从鼠标测试上看,采用星闪技术的鼠标平均刷新率2.4G鼠标的4倍,平均传输时延是413.14μs,是2.4G鼠标的1/4。一项技术的应用,除了本身技术的先进性,同时还要多方支持,才能推动技术全面落地,这就是星闪联盟的作用。_华为星闪联盟

数据库连接失败: Could not create connection to database server. Attempted reconnect 3 times. Giving up.-程序员宅基地

文章浏览阅读1.2w次。mysql 连接失败_could not create connection to database server. attempted reconnect 3 times.

CMakeLists.txt例子, (使用eigen, opencv, pangolin, Sophus, Ceres)_cmakelists.txt remake-程序员宅基地

文章浏览阅读3.5k次。一个CMakeLists.txt例子所在目录结构如下:wfq@wfq:~/MyProjects/cmaketest$ tree ..├── CMakeLists.txt├── cmake_module│ └── FindHELLO.cmake├── include│ └── head.h├── main.cpp├── src│ └── head.cpp└── SubFolder └── CMakeLists.txtCMakeLists.txt文件cmake_cmakelists.txt remake

阿里云平台短信推送_阿里云短信推送-程序员宅基地

文章浏览阅读755次。作为初次接触阿里云短信发送平台,整完之后自己记录一下想用阿里云平台的短信发送,得有4个必要条件,1.注册阿里云,拥有自己的账户,及accessKeyId2.也会拥有自己的密钥:及accessSecret3.其次签名也是必要的:及signName3.模板审核通过后才可以发送短信:及templateCode1.2查看自己的id和密匙直接来看签名:查询自己签名网址:https://dysms.console.aliyun.com/dysms.htm?spm=a2c8b.20231166.top_阿里云短信推送

推荐文章

热门文章

相关标签