【问题标题】:Solr - Block join Parent query with many Children constraintsSolr - 阻止具有许多子约束的父查询
【发布时间】:2016-01-25 21:57:34
【问题描述】:

该问题适用于以下嵌套文档:

<doc>
  <field name="id">1</field>
  <field name="title">Solr has block join support</field>
  <field name="content_type">parentDocument</field>
  <doc>
    <field name="id">11</field>  
    <field name="type">comment</field>  
    <field name="comments">SolrCloud supports it too!</field>
  </doc>
  <doc>
    <field name="id">12</field>  
    <field name="type">publisher</field>  
    <field name="address">England</field>
    ....
  </doc>
</doc>
....

我的问题是,如何编写允许对多个嵌套子文档进行约束的块连接父查询?我确实尝试了以下方法,但没有奏效:

{!parent which="content_type:accommodation"}
(
  (+type:comment +comments:SolrCloud) AND
  (+type:publisher +address:England)
) 

0 作为结果返回!

【问题讨论】:

    标签: join solr constraints block


    【解决方案1】:

    对于您的用例,您可以只使用多个块连接过滤器:

    q=*:*&
    fq={!parent which="content_type:accommodation"}(+type:comment +comments:SolrCloud)&
    fq={!parent which="content_type:accommodation"}(+type:publisher +address:England)
    

    第一个过滤器将查找哪些父文档有一个满足条件(+type:comment +comments:SolrCloud)的子文档。

    第二个过滤器 clouse 将对满足第一个过滤器的父文档子集进行操作。它会在这个子集中找到满足条件(+type:publisher +address:England)的父文档。

    【讨论】:

    • 等我回公司试试你的解决方案!
    • 您的建议无效!即使只有一个 fq-query-clause!查询必须放在以 q={!parent which=....} 开头的子句中。但如前所述,我仍然不知道如何编写查询!
    • 嗨,分子人,它现在可以工作了!但主查询必须是这些块连接查询之一,或者主查询必须返回所有内容,例如:q=*:* 请更新您的答案,以便将其标记为正确答案!
    • 您好 Tim Long,非常感谢您的解决方案,因为我已经为这件事头疼了一段时间。我想您应该使用自我回答功能将此问题标记为已解决
    • 顺便说一句,这个查询 ({!parent which="doc_type:parent"}Abc AND Def) 的问题是,当我将查询分组到括号内并在子查询中包含 AND 条件时条件它无法工作。为什么会这样
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多