簡體   English   中英

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 中使用連接查詢解析器(即{!join} )的{!join}無法從連接的兩側檢索內容。 這些是純粹的內部聯接,其中一個字段用於從被查詢的集合中過濾內容。

這與關系數據庫中的聯接概念不同,因為沒有真正聯接任何信息。 一個合適的 SQL 類比是“內部查詢”。

如果您使用的是最新版本的 Solr,您還有另一種選擇,即使用 Streaming Expression

這將允許您設置兩個流源,然后應用leftOuterJoinouterHashJoin來獲取包含來自雙方的組合信息的文檔。

從參考指南中的示例:

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"
)

用您的問題中的collection1collection2替換petspeople 請注意,在使用leftOuterJoin時,您必須有一個sort標准來映射用於連接的鍵,但這通常會使連接對於更大的結果更有效,因為 outerHashJoin 必須在內存中保留更多。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM