gpt4 book ai didi

java - Solr 中的完全外连接

转载 作者:行者123 更新时间:2023-12-02 09:12:28 25 4
gpt4 key购买 nike

我正在尝试对两个集合进行完整的外部联接。给定 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}说明:desc1

但这只会导致内部联接。有没有办法可以使用过滤器查询外部连接两个集合?如果这不可能,是否有插件可以做到这一点?

最佳答案

一个join using the join query parser (即 {!join})在 Solr 中无法检索连接两侧的内容。这些是纯粹的内部联接,其中一个字段用于过滤正在查询的集合中的内容。

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 ,然后应用 a leftOuterJoinan 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"
)

将问题中的 petspeople 替换为 collection1collection2。请注意,您必须有一个 sort 标准来映射使用 leftOuterJoin 时用于连接的键,但这通常会使连接对于较大的结果大小更加有效,因为externalHashJoin 必须在内存中保留更多内容。

关于java - Solr 中的完全外连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59295689/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com