Solr Block使用与非父文档匹配的查询加入子查询解析器

时间:2016-10-31 17:04:20

标签: solr

我一直在使用Solr 6.2.1和嵌套文档,并尝试使用Block Join Children Query Parser检索特定类型父级的所有子文档,但是我收到以下错误:

  

父查询生成与父项过滤器不匹配的文档

我的文件类似于:

<add>
  <doc>
  <field name="id">1</field>
  <field name="type">MYDOCTYPE</field>
  <field name="isParent">true</field>
    <doc>
      <field name="id">1_1</field>  
      <field name="comments">some comments</field>
    </doc>
    <doc>
      <field name="id">1_2</field>  
      <field name="comments">some more comments</field>
    </doc>
  </doc>
  <doc>
  <field name="id">2</field>
  <field name="type">MYDOCTYPE</field>
  <field name="isParent">true</field>
    <doc>
      <field name="id">2_1</field>  
      <field name="comments">some comments</field>
    </doc>
    <doc>
      <field name="id">2_2</field>  
      <field name="comments">some more comments</field>
    </doc>
  </doc>
  <doc>
  <field name="id">3</field>
  <field name="type">MYDOCTYPE</field>
  </doc>
</add>

我试图用q={!child of="isParent:true"}type:MYDOCTYPE

查询它们

我想问题是文档3的类型是MYDOCTYPE但不是父文档,因为它没有子文档,所以它没有意义。

无论如何都要检索所有子文档而不将字段isParent添加到文档3中?

2 个答案:

答案 0 :(得分:1)

我找到了一种解决方法,那就是进行查询:

{!child of="isParent:true"}type:"EDH/MAG"+isParent:true

这样查询的第二部分只匹配doc 1和2,并且不会抛出异常。

答案 1 :(得分:1)

这是一个古老的问题,但也许我的回答可以对某人有所帮助。

将id = 3的文档视为孩子是正确的,因此会发生错误。

也许我们可以假定父文档是具有 isParent:true 或具有非空 type 字段和 id 的文档,则查询可能看起来像这样:

q={!child of="isParent:true OR (id:* AND type:*)"}type:MYDOCTYPE