Значения полей документа как параметр для вложенных подзапросов в solr - PullRequest
1 голос
/ 13 июня 2019

У меня есть следующие вложенные данные для 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?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...