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