2015-06-10 87 views
3

我需要幫助構建Solr查詢,該查詢不僅會搜索子文檔並返回父文檔,還會搜索父文檔。請參閱我下面的示例模式:Solr查詢通過加入來搜索子文檔和父文檔

廠商

  • 編號
  • 名稱
  • 評論

產品

  • 編號
  • ManufacturerId
  • 產品名稱

所有Solr的文檔具有唯一的ID字段,但產品有作爲外鍵的特殊領域「ManufacturerId」。

我想搜索所有名稱爲「iPod」的產品並返回父級「製造商」文檔。我可以通過使用以下聯合聲明來完成。

{!join from=ManufacturerId to=Id}ProductName:iPod 

此外,我想撤回在評論中有iPod的製造商。因此,結果將包括所有擁有iPod產品且在評論字段中包含iPod字樣的製造商。我試過以下,沒有運氣。

{!join from=ManufacturerId to=Id}ProductName:iPod OR Comments:iPod 

任何幫助將不勝感激。

謝謝!

UPDATE:

看來,當我使用的過濾器查詢「FQ」字段,而不是常規的查詢字段「Q」才能正常工作。我不確定這是否是最佳解決方案。另外,我想知道相關性是否會以同樣的方式工作。讚賞更好的解

Comments:iPod {!join from=RouteId to=Id}ProductName:iPod 

iPod {!join from=RouteId to=Id}ProductName:iPod 

回答

0

使用查詢告訴Solr的另一個查詢應作出將影響結果列表。

Q =

_query_:"{!join from=ManufacturerId to=Id}ProductName:iPod" OR Comments:iPod 
0

如果你真的指孩子(又名嵌套)文件和家長,我建議你使用塊連接:

https://cwiki.apache.org/confluence/display/solr/Other+Parsers#OtherParsers-BlockJoinQueryParsers

已與專門創建那個目的。爲其他條件添加「OR」,您應該都可以。

+0

對不起,有任何混淆。我應該提到它們不是單一文件的一部分,而是單獨的文件。由於產品的ManufacturerId字段存在關係,但是沒有真正定義的關係,因爲如果它是包含子產品「Products」的單個「製造商」文檔就會存在。此外,我正在使用不支持塊加入的Solr 4.3。 –