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

问题描述 投票:0回答:2

我正在运行SOLR4并运行一些联接查询,例如-{!join from=some_id to=another_id}(a_id:55 AND some_type_id:3)

当我运行SOLR4的单个实例(不是云)时,此查询返回4个结果,确切地说应该是这样。

但是,当我在带有两个分片和两个副本的SOLR云上运行它时,它仅返回一个结果,而例如,如果直接通过id搜索,则可以在索引中找到另外三个。

任何想法出什么问题和/或如何解决?

提前感谢!

join solr solrcloud
2个回答
1
投票

[Join仅在分片内起作用。加入将无法在所有分片上使用。我认为一个分片应具有3个符合条件的文档,另一个分片应具有一个符合条件的文档。跨碎片的复杂连接尚未出现。

如果要作为强制功能加入,请考虑使用具有多个复制功能的单个分片。


0
投票

在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路由器的更多文档

© www.soinside.com 2019 - 2024. All rights reserved.