Join 分布式配置中的SOLR连接查询

Join 分布式配置中的SOLR连接查询,join,solr,solrcloud,Join,Solr,Solrcloud,我正在运行SOLR4并运行一些连接查询,例如-{!join from=some\u id to=other\u id}(a\u id:55和some\u type\u id:3) 当我运行SOLR4的单个实例(不是云)时,这个查询返回4个结果,这正是它应该返回的结果 但当我在SOLR cloud上运行它时,使用两个碎片和两个副本,它只返回一个结果,而如果直接按id搜索,则可以在索引中找到另外3个 有什么问题和/或如何解决的想法吗 提前谢谢 Join只在shard中起作用。Join在碎片之间不起作

我正在运行SOLR4并运行一些连接查询,例如-
{!join from=some\u id to=other\u id}(a\u id:55和some\u type\u id:3)

当我运行SOLR4的单个实例(不是云)时,这个查询返回4个结果,这正是它应该返回的结果

但当我在SOLR cloud上运行它时,使用两个碎片和两个副本,它只返回一个结果,而如果直接按id搜索,则可以在索引中找到另外3个

有什么问题和/或如何解决的想法吗


提前谢谢

Join只在shard中起作用。Join在碎片之间不起作用。我认为一个碎片应该有3个符合条件的文档,另一个碎片应该有一个。复杂的碎片连接尚未出现


如果您想将加入作为强制功能,请考虑将具有多个复制的单个碎片作为解决方案。

在Solr中创建碎片时,您可以将路由器设置为
compositeId
,在索引文档时,您可以将ID前缀插入ID属性,这将有助于Solr为文档选择碎片。换句话说,具有相同ID前缀的所有文档都将存储在单个分片上。虽然您不能用它来告诉Solr确切使用哪个shard,但您可以指示需要存储在单个shard上的文档

例如,如果为帖子和评论编制索引,那么帖子的ID属性可能类似于
POSTDATA123!Post 123
,其中
123
是帖子ID。当索引属于ID为
123
的帖子的评论时,ID属性可以是
POSTDATA123!注释321
,其中
321
是注释ID。Solr将理解此前缀
POSTDATA123
在两个文档上,并将Post及其注释存储在单个碎片上

在为多篇文章编制索引时,Solr仍将使用碎片,并将你的文章均匀地分布在可用的碎片上,但连接将起作用,因为评论将始终存储在与其父文章相同的碎片上


你可以在这里找到更多关于
compositeId
路由器的文档

我有一个类似的用例,我想在solrcloud5上使用连接查询,但不支持跨碎片连接。但是,如果只创建一个碎片和多个复制,那么摄取速度会急剧下降,查询响应时间也会非常长。是否有任何策略可以调整文档切分策略?