SOLR在分布式配置中加入查询

时间:2012-12-04 21:59:40

标签: join solr solrcloud

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

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

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

任何想法有什么问题和/或如何修复它?

提前感谢!

2 个答案:

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