Solr 中的完全外部连接
Full Outer Join in Solr
我正在尝试对两个集合进行完全外部联接。给定 collection1
文档如下所示:
{
id: 234982032,
name: example,
listId: 123
}
和 collection2
的文档如下所示:
{
id: 123,
description: desc1
}
我希望得到这样的结果:
{
id: 234982032,
name: example,
description: desc1
}
我试过使用这个命令:
fq={!join from=listId to=id fromIndex=collection2}description:desc1
但这只会导致内部联接。有没有一种方法可以使用过滤器查询外部连接两个集合?如果这不可能,有没有可以做到这一点的插件?
Solr 中的 A join using the join query parser(即 {!join}
)无法从连接的两侧检索内容。这些是纯粹的内连接,其中一个字段用于从正在查询的集合中过滤内容。
This is different from the concept of a join in a relational database because no information is being truly joined. An appropriate SQL analogy would be an "inner query".
如果您使用的是最新版本的 Solr,您还有另一个选择,即 using a Streaming Expression。
这样您就可以set up two stream sources, then apply either a leftOuterJoin or an outerHashJoin获得包含双方信息的文档。
来自参考指南中的示例:
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
替换 pets
和 people
。请注意,在使用 leftOuterJoin
时,您必须有一个 sort
条件来映射用于连接的键,但这通常会使连接对于更大的结果大小更有效,因为 outerHashJoin 必须保留很多更多内存。
我正在尝试对两个集合进行完全外部联接。给定 collection1
文档如下所示:
{
id: 234982032,
name: example,
listId: 123
}
和 collection2
的文档如下所示:
{
id: 123,
description: desc1
}
我希望得到这样的结果:
{
id: 234982032,
name: example,
description: desc1
}
我试过使用这个命令:
fq={!join from=listId to=id fromIndex=collection2}description:desc1
但这只会导致内部联接。有没有一种方法可以使用过滤器查询外部连接两个集合?如果这不可能,有没有可以做到这一点的插件?
A join using the join query parser(即 {!join}
)无法从连接的两侧检索内容。这些是纯粹的内连接,其中一个字段用于从正在查询的集合中过滤内容。
This is different from the concept of a join in a relational database because no information is being truly joined. An appropriate SQL analogy would be an "inner query".
如果您使用的是最新版本的 Solr,您还有另一个选择,即 using a Streaming Expression。
这样您就可以set up two stream sources, then apply either a leftOuterJoin or an outerHashJoin获得包含双方信息的文档。
来自参考指南中的示例:
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
替换 pets
和 people
。请注意,在使用 leftOuterJoin
时,您必须有一个 sort
条件来映射用于连接的键,但这通常会使连接对于更大的结果大小更有效,因为 outerHashJoin 必须保留很多更多内存。