Solr Query通过join搜索子文档和父文档

时间:2015-06-10 17:59:39

标签: solr solr-query-syntax

我需要帮助构建一个Solr查询,该查询不仅会搜索子文档并返回父文档,还会搜索父文档。请参阅下面的示例架构:

制造商

  • Id
  • 姓名
  • 评论

产品

  • 编号
  • ManufacturerId
  • 产品名称

所有Solr文档都有唯一的ID字段,但Products有一个特殊字段“ManufacturerId”作为外键。

我想搜索所有名为“iPod”的产品,并返回父“制造商”文档。我可以通过使用以下Join语句来完成。

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

此外,我想撤回评论中有iPod的制造商。因此,结果将包括所有拥有iPod产品且在其评论字段中包含iPod字样的制造商。我试过以下没有运气。

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

非常感谢任何帮助。

谢谢!

更新:

当我使用过滤器查询'fq'字段而不是常规查询字段'q'时,它似乎正常工作。我不确定这是否是最佳解决方案。此外,我想知道相关性是否会以相同的方式工作。更好的解决方案赞赏。

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

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

2 个答案:

答案 0 :(得分:0)

使用查询告诉Solr应该进行另一个影响结果列表的查询。

Q =

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

答案 1 :(得分:0)

如果你真的指的是儿童(又名嵌套)文件和父母,我建议你使用区块加入:

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

是专门为此目的而创建的。为任何其他条件添加“OR”,你应该没问题。