Java Solr中的完全外连接

Java Solr中的完全外连接,java,solr,lucene,solrcloud,Java,Solr,Lucene,Solrcloud,我正在尝试对两个集合进行完全外部连接。给定collection1,其文档如下所示: { id: 234982032, name: example, listId: 123 } { id: 123, description: desc1 } { id: 234982032, name: example, description: desc1 } 和collection2,其文档如下所示: { id: 234982032, name: example, listId: 123 } { id:

我正在尝试对两个集合进行完全外部连接。给定collection1,其文档如下所示:

{
id: 234982032,
name: example,
listId: 123
}
{
id: 123,
description: desc1
}
{
id: 234982032,
name: example,
description: desc1
}
和collection2,其文档如下所示:

{
id: 234982032,
name: example,
listId: 123
}
{
id: 123,
description: desc1
}
{
id: 234982032,
name: example,
description: desc1
}
我期待这样的结果:

{
id: 234982032,
name: example,
listId: 123
}
{
id: 123,
description: desc1
}
{
id: 234982032,
name: example,
description: desc1
}
我已尝试使用此命令:

fq={!join from=listId to=id fromIndex=collection2}说明:desc1

但这只会导致内部联接。有没有一种方法可以使用筛选查询将两个集合外部联接起来?如果这是不可能的,是否有插件可以做到这一点?

a即Solr中的{!join}无法从连接的两侧检索内容。这些都是纯粹的内部联接,其中一个字段用于过滤来自被查询集合的内容

这与关系数据库中的连接概念不同,因为没有真正连接的信息。一个合适的SQL类比应该是一个内部查询

如果您使用的是最新版本的Solr,那么您还有另一个选择,即

这将允许您,然后申请或获得一份包含双方综合信息的文档

参考指南中的示例:

leftOuterJoin(
  search(people, q="*:*", qt="/export", fl="personId,name", sort="personId asc"),
  search(pets, q="type:cat", qt="/export", fl="personId,petName", sort="personId asc"),
  on="personId"
)

outerHashJoin(
  search(people, q="*:*", qt="/export", fl="personId,name", sort="personId asc"),
  hashed=search(pets, q="type:cat", qt="/export", fl="personId,petName", sort="personId asc"),
  on="personId"
)

用问题中的collection1和collection2替换宠物和人。请注意,在使用leftOuterJoin时,您必须具有映射用于联接的键的排序条件,但这通常会使联接对于更大的结果大小更有效,因为outerHashJoin必须在内存中保留更多的内容。

Thank you@MatsLindh,这对我很有用。这也适用于嵌套文档吗?我一直试图在leftOuterJoin之外应用过滤器来维护文档的嵌套结构,但未能实现。很抱歉,我对嵌套文档一点也不熟悉。嗨,bro@MatsLindh。很抱歉现在评论太晚了。我有一个关于分页流表达式的问题。现在有机会吗?@DucAnhPham如果你有问题,就提出一个合适的问题