文档章节

solrcloud document路由

将将将
 将将将
发布于 2016/07/12 15:11
字数 1081
阅读 304
收藏 0
点赞 0
评论 3

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

 

 

 

 

 

 

© 著作权归作者所有

共有 人打赏支持
将将将
粉丝 21
博文 17
码字总数 12880
作品 0
深圳
程序员
加载中

评论(3)

将将将
将将将

引用来自“孟宪奎”的评论

请问您测试成功过implicit方式么?我测试这种方式,一直都没有成功过。
成功过,指定片参数就行啊
孟宪奎
我用的是solr6.1版本
孟宪奎
请问您测试成功过implicit方式么?我测试这种方式,一直都没有成功过。
SolrCloud5.0路由 Collection建与数据迁移

SolrCloud的设计是为了提供高可用、容错,在分布式环境中进行内容索引和查询请求。 SolrCloud 5.0,对自带的SolrCloud的启动脚本进行了改进,启动SolrCloud变的异常简单,执行 view sourcep...

zcl111 ⋅ 2016/07/14 ⋅ 0

SolrCloud集群Collection进行手动二次Sharding--solr分片相关

SolrCloud集群Collection进行手动二次Sharding http://blog.csdn.net/shirdrn/article/details/9770829 一致性hash和solr千万级数据分布式搜索引擎中的应用 http://www.lanceyan.com/tech/a......

毛朱 ⋅ 2015/08/30 ⋅ 0

SolrCloud Wiki翻译(3)Shards & Indexing Data

When your data is too large for one node, you can break it up and store it in sections by creating one or more shards. Each is a portion of the logical index, or core, and it's ......

曾杰 ⋅ 2014/02/12 ⋅ 1

SolrCloud wiki翻译(6)近实时搜索, 索引复制,灾难恢复

SolrCloud and Replication SolrCloud与索引复制 Replication ensures redundancy for your data, and enables you to send an update request to any node in the shard. If that node is ......

曾杰 ⋅ 2014/02/28 ⋅ 0

solrcloud Recovery原理及无法选举分片leader

我们在使用SolrCloud中会经常发现会有备份的shard出现状态Recoverying,这就表明SolrCloud的数据存在着不一致性,需要进行Recovery,这个时候的SolrCloud建索引是不会写入索引文件中的(每个s...

将将将 ⋅ 2016/07/11 ⋅ 0

Apache Solr 5.0 发布,Java 搜索服务器

你知道的,每次 Lucene 发布新版本时,Solr 也会相应发布更新版本。Lucene 刚刚发布了 5.0 版本,Solr 也同时发布了 5.0 版本。从 5.0 开始 Solr 不再提供 war 包方式,而是以独立的 Java 服...

oschina ⋅ 2015/02/20 ⋅ 9

solrj的CloudSolrClient源码分析及为什么查询慢

solrj针对solrcloud提供了CloudSolrClient,用于对集群环境solr操作,从一个测试例子,一步步深入,看看CloudSolrClient是如何做查询操作的 1、使用CloudSolrClient发起一个查询请求 2、接着...

将将将 ⋅ 2016/07/11 ⋅ 2

solr的 group应用

如:http://localhost:8080/solr/testcore/select?q=:&wt=json&indent=true&group=true&group.field=field&group.limit=0 参数说明 group true/false if true, turn on result grouping grou......

浮云飘飘 ⋅ 2015/12/11 ⋅ 0

solrcloud数据导入,只能插入一个shard

我搭建了solrcloud环境,solr版本是4.9.1 创建了一个collection,采用手工创建shard和replica,3个shard和3个replica,但建索引的时候却发现数据只插入1个shard,另外两个shard无数据; 后来我...

锋_行者 ⋅ 2015/02/10 ⋅ 0

Apache Solr 4.3.1 发布,Java 搜索服务器

Apache Solr 4.3.1 发布了,包含 24 个 bug 修复,以及很多 SolrCloud 的 bug 和关于分区切分的问题。详情请看分发包中的 CHANGES.txt 文件。 Apache Solr (读音: SOLer) 是一个开源的搜索服...

oschina ⋅ 2013/06/19 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

java软件工程师简历中项目经验怎么写?

作者:暗灭 链接:https://www.zhihu.com/question/20695310/answer/180691302 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 直接给你贴个我自己的简历...

颖伙虫 ⋅ 29分钟前 ⋅ 0

Confluence 6 恢复一个站点有关使用站点导出为备份的说明

推荐使用生产备份策略。我们推荐你针对你的生产环境中使用的 Confluence 参考 Production Backup Strategy 页面中的内容进行备份和恢复(这个需要你备份你的数据库和 home 目录)。XML 导出备...

honeymose ⋅ 今天 ⋅ 0

JavaScript零基础入门——(九)JavaScript的函数

JavaScript零基础入门——(九)JavaScript的函数 欢迎回到我们的JavaScript零基础入门,上一节课我们了解了有关JS中数组的相关知识点,不知道大家有没有自己去敲一敲,消化一下?这一节课,...

JandenMa ⋅ 今天 ⋅ 0

火狐浏览器各版本下载及插件httprequest

各版本下载地址:http://ftp.mozilla.org/pub/mozilla.org//firefox/releases/ httprequest插件截至57版本可用

xiaoge2016 ⋅ 今天 ⋅ 0

Docker系列教程28-实战:使用Docker Compose运行ELK

原文:http://www.itmuch.com/docker/28-docker-compose-in-action-elk/,转载请说明出处。 ElasticSearch【存储】 Logtash【日志聚合器】 Kibana【界面】 答案: version: '2'services: ...

周立_ITMuch ⋅ 今天 ⋅ 0

使用快嘉sdkg极速搭建接口模拟系统

在具体项目研发过程中,一旦前后端双方约定好接口,前端和app同事就会希望后台同事可以尽快提供可供对接的接口方便调试,而对后台同事来说定好接口还仅是个开始、设计流程,实现业务逻辑,编...

fastjrun ⋅ 今天 ⋅ 0

PXE/KickStart 无人值守安装

导言 作为中小公司的运维,经常会遇到一些机械式的重复工作,例如:有时公司同时上线几十甚至上百台服务器,而且需要我们在短时间内完成系统安装。 常规的办法有什么? 光盘安装系统 ===> 一...

kangvcar ⋅ 昨天 ⋅ 0

使用Puppeteer撸一个爬虫

Puppeteer是什么 puppeteer是谷歌chrome团队官方开发的一个无界面(Headless)chrome工具。Chrome Headless将成为web应用自动化测试的行业标杆。所以我们很有必要来了解一下它。所谓的无头浏...

小草先森 ⋅ 昨天 ⋅ 0

Java Done Right

* 表示难度较大或理论性较强。 ** 表示难度更大或理论性更强。 【Java语言本身】 基础语法,面向对象,顺序编程,并发编程,网络编程,泛型,注解,lambda(Java8),module(Java9),var(...

风华神使 ⋅ 昨天 ⋅ 0

Linux系统日志

linux 系统日志 /var/log/messages /etc/logrotate.conf 日志切割配置文件 https://my.oschina.net/u/2000675/blog/908189 logrotate 使用详解 dmesg 命令 /var/log/dmesg 日志 last命令,调......

Linux学习笔记 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部