У меня есть следующие вложенные данные для 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, так как это приведет только ко всем потомкам документа в плоской иерархии, независимо от того, какой у них уровень (дочерний, внучатый и т. Д.).
Однако это представляется возможным с подзапросами. Как описано в документации , с запросом типа
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}
Это даст ВСЕ документы внука для всех дочерних документов, а не только те, в которых должны совпадать соответствующие записи идентификатора / родительских элементов.
Итак, мои вопросы:
1) Что именно означает в запросе $ row.id? Я не мог найти документацию по этому вопросу. В первом подзапросе он явно ссылается на исходный идентификатор корневых документов, как и должно быть. Но как мне сделать так, чтобы он ссылался на идентификатор дочернего документа во втором подзапросе?
2) Есть ли более разумный способ сделать это для вложенных данных глубиной n?