3

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

制造商

  • ID
  • 姓名
  • 注释

产品

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

所有 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
4

2 回答 2

0

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

q=

_query_:"{!join from=ManufacturerId to=Id}ProductName:iPod" OR Comments:iPod
于 2015-06-10T21:35:14.517 回答
0

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

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

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

于 2015-06-11T07:20:12.540 回答