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