我有以下用于solr的嵌套数据:
<add>
<doc>
<field name="id">1</field>
<field name="path">1.root</field>
<field name="title_tsi">Solr has block join support</field>
<field name="type">parentDocument</field>
<doc>
<field name="id">2</field>
<field name="path">2.root.sub</field>
<field name="parent">1</field>
<field name="comments_tsi">SolrCloud supports it too!</field>
<field name="type">childDocument</field>
<field name="subcomment_tsi">
<doc>
<field name="id">5</field>
<field name="path">3.root.sub.sub2</field>
<field name="parent">2</field>
<field name="comments_tsi">This is a subcomment</field>
<field name="type">childchildDocument</field>
</doc>
</doc>
</field>
</doc>
</add>
我想按Solr查询原样显示嵌套数据。据我所知,ChildDocTransformerFactory无法做到这一点,因为这只会产生扁平化层次结构中文档的所有后代,而不管它们处于哪个级别(子级,孙级等)。
但是,这似乎可以通过子查询来实现。如in the documentation所述,查询类似
q=path:1.*&fl=*,d1:[subquery]&d1.q={!terms f=parent v=$row.id}
将导致显示所有根文档,然后显示根文档中的所有子文档。
但是,如果我想扩展它以在子文档中也包括孙子文档,则通过向子查询添加子查询,我的查询将会失败。
q=path:1.*&fl=*,d1:[subquery]&d1.q={!terms f=parent v=$row.id}&d1.fl=*,d2:[subquery]&d2.q={!terms f=parent v=$row.id}
这将产生所有子文档的所有孙文档,而不仅仅是对应的id / parent条目应匹配的孙文档。
所以我的问题是:
1)“ $ row.id”在查询中到底指什么?我找不到有关此主题的文档。在第一个子查询中,它显然应该引用根文档的原始ID。但是,如何在第二个子查询中引用子文档的ID?
2)对于深度为n的嵌套数据,是否有更聪明的方法?