提问者:小点点

Solr查询通过join搜索子文档和父文档


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

制造商

  • id
  • 姓名
  • 评论

产品介绍

  • id
  • 制造商ID
  • 产品名称

所有Solr文档都有一个唯一的ID字段,但Products有一个充当外键的特殊字段“制造商ID”。

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

{!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个答案

匿名用户

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

q=

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

匿名用户

如果您真的指的是子(又名嵌套)文档和父级,我建议您使用块连接:

https://cwiki.apache.org/confluence/display/solr/Other解析器#其他解析器-BlockJoinQueryParser

这是专门为此目的而创建的。为任何其他条件添加一个“或”,你就应该没事了。