技术标签: Solr
目录
solrcloud的官方文档有对路由的简短介绍,但是不够详细和深入。solrcloud有两种路由策略,一种是implicit(个人称之为手动路由) ,一种是compositeId(个人称之为自动路由);在创建collection的时候,如果没有指定路由方式,指定了numShards个数,默认是自动路由,即compositeId路由;反之是implicit路由。在solrcloud的admin界面上,能通过collection的state.json看得到collection的路由策略
使用compositeId路由,在创建collection的时候必须要指定numShards(分片数)。
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。
然后在查询的时候,需要把这个前缀包含到_route_参数里面(比如:q=solr&_route_=juanpi!)使查询指向指定的shard。在某些情况下;这样操作能提升查询的性能,因为它省掉了需要在所有shard上发起http查询请求。
该路由方式需要外部指定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"/>
由于创建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");
查询的时候到某个分片查询即可
compositeId路由,只能通过手动分裂某一片成两片,然后删除原来片的方式扩展
在分裂的过程中,原分片的数据会大致均匀分成2份,复制到新生成的两个分片中
例如,原分片1万数据,分裂成两片后,每片大致5千数据
然后再手动删除原来(1万数据)的那片
由于implicit路由在写入的时候指定了分片,所以可以自由的增加分片
文章浏览阅读1.5k次。1.netty能做什么首先netty是一款高性能、封装性良好且灵活、基于NIO(真·非阻塞IO)的开源框架。可以用来手写web服务器、TCP服务器等,支持的协议丰富,如:常用的HTTP/HTTPS/WEBSOCKET,并且提供的大量的方法,十分灵活,可以根据自己的需求量身DIV一款服务器。用netty编写TCP的服务器/客户端1.可以自己设计数据传输协议如下面这样:2.可以自定义编码规则和解码规则..._tcp数据转发服务器
文章浏览阅读4k次。01安卓手机打开bin文件的方法是更改后缀名,将后缀名修改为.apk即可,安卓是一种基于Linux内核(不包含GNU组件)的自由及开放源代码的操作系统。bin后缀的是一种二进制文件,它的用途是根据用户系统或者电脑内的应用而定的,这是文件格式binary的缩写。二进制(binary)在数学和数字电路中指以2为基数的记数系统,以2为基数代表系统是二进位制的。在安卓手机上打开bin文件,只需要将bin文..._安卓手机如何打开bin文件
文章浏览阅读5.5k次。Rancher是一套容器管理平台,它可以帮助组织在生产环境中轻松快捷的部署和管理容器。 Rancher可以轻松地管理各种环境的Kubernetes,满足IT需求并为DevOps团队提供支持。Kubernetes不仅已经成为的容器编排标准,它也正在迅速成为各类云和虚拟化厂商提供的标准基础架构。Rancher用户可以选择使用Rancher Kubernetes Engine(RKE)创建Kubernetes集群,也可以使用GKE,AKS和EKS等云Kubernetes服务。 Rancher用户还可以导入和管理现_rancher部署
文章浏览阅读80次。在11.2中,Oracle对于全外连接的执行计划进行了优化。这篇介绍新增的两个相关的HINT。Oracle在推出了新的执行计划的同时,还提供了两个控制这个执行计划的提示NATIVE_FULL_OUTER_JOIN和NO_NATIVE_FULL_OUTER_JOIN。这两个HINT的使用十分简单,不需要其他的任何参数。下面继续上一篇文章的例子:SQL> SELECT /*..._oracle 执行计划union
文章浏览阅读9.5k次。文本存入csv文件中_dt = pd.dataframe(list1, columns=columns) dt.to_excel("result_xlsx.xlsx", in
文章浏览阅读645次。学习视频。_catia编程论坛
文章浏览阅读462次,点赞14次,收藏5次。这里搜索localRepository,然后添加自己想设置的本地仓库地址(就是一个文件夹),尽量设置在c盘之外,后面的依赖越来越多c盘可能会爆满。在File-》New Projects Setup-》Settings for New Projects下设置maven。只设置上述内容会发现,每次新创建的项目加载还是很慢【坑!】,所以还是需要配置下面的内容。maven的setting.xml文件放在安装的maven的conf目录下。设置两个东西,一个是阿里的镜像,另一个是本地仓库。
文章浏览阅读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。一项技术的应用,除了本身技术的先进性,同时还要多方支持,才能推动技术全面落地,这就是星闪联盟的作用。_华为星闪联盟
文章浏览阅读1.2w次。mysql 连接失败_could not create connection to database server. attempted reconnect 3 times.
文章浏览阅读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_阿里云短信推送