【问题标题】:Solr Query to search child and parent documents by joinSolr Query 通过连接搜索子文档和父文档
【发布时间】:2015-06-10 17:59:39
【问题描述】:

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

制造商

  • 身份证
  • 姓名
  • 评论

产品

  • 身份证
  • 制造商 ID
  • 产品名称

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

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

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

另外,我想撤回那些在评论中有 iPod 的制造商。因此,结果将包括所有拥有 iPod 产品并在其 cmets 字段中包含 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

【问题讨论】:

    标签: solr solr-query-syntax


    【解决方案1】:

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

    q=

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • 抱歉有任何混淆。我应该提到它们不是单个文档的一部分,而是单独的文档。由于产品的 ManufacturerId 字段而存在该关系,但没有真正定义的关系,如果它是包含子“产品”的单个“制造商”文档则存在。另外我正在使用不支持块连接的 Solr 4.3。
      猜你喜欢
      • 1970-01-01
      • 2017-07-22
      • 2012-08-14
      • 1970-01-01
      • 2016-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多