我一直在使用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中?
答案 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