我需要帮助构建一个Solr查询,该查询不仅会搜索子文档并返回父文档,还会搜索父文档。请参阅下面的示例架构:
制造商
产品
所有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
答案 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”,你应该没问题。