我正在运行SOLR4并运行一些连接查询,例如 - {!join from=some_id to=another_id}(a_id:55 AND some_type_id:3)
当我运行SOLR4的单个实例(不是云)时,此查询返回4个结果,确切地说它应该如何。
但是当我在SOLR云上运行它时,它有两个分片和两个副本,它只返回一个结果,而如果直接由id搜索,则可以在索引中找到另外3个。
任何想法有什么问题和/或如何修复它?
提前感谢!
答案 0 :(得分:1)
加入仅适用于分片。加入将无法跨分片工作。我认为一个分片应该有3个符合条件的文档,而另一个分片应该有一个。复杂的联接尚未结束。
如果要将join作为必需功能,请考虑使用多个复制的单个分片作为解决方法。
答案 1 :(得分:0)
在Solr中创建分片时,可以将路由器设置为compositeId
,在为文档建立索引时,可以在ID属性中插入ID前缀,这将有助于Solr为文档选择分片。换句话说,所有具有相同ID前缀的文档都将存储在一个分片中。虽然您不能使用它来告诉Solr确切使用哪个分片,但可以指出需要存储在单个分片中的文档。
例如,如果您为帖子和评论建立索引,则您的帖子的ID属性可能看起来像POSTDATA123!Post 123
,其中123
是帖子ID。当索引ID为123
的帖子的索引时,ID属性可以是POSTDATA123!Comment 321
,其中321
是Comment ID。 Solr会在两个文档中理解此前缀POSTDATA123!
,并将Post及其注释存储在单个分片上。
在为多个帖子建立索引时,Solr仍将使用分片并将您的帖子均匀地分布在可用分片上,但由于注释始终与父帖子存储在同一分片上,因此加入将起作用。
您可以在https://lucene.apache.org/solr/guide/6_6/shards-and-indexing-data-in-solrcloud.html上找到有关compositeId
路由器的更多文档