Вы можете смоделировать это по-разному, в зависимости от ваших потребностей поиска / огранки.Обычно вы будете использовать многозначные или динамические поля.В следующих примерах я опущу тип поля, индексированные и сохраненные флаги:
<field name="first"/>
<field name="last"/>
<field name="child_first" multiValued="true"/>
<field name="child_last" multiValued="true"/>
Вам решать, как соотнести имена и фамилии детей.Или вы можете просто поместить оба в одно поле:
<field name="first"/>
<field name="last"/>
<field name="child_first_and_last" multiValued="true"/>
Еще одно:
<field name="first"/>
<field name="last"/>
<dynamicField name="child_first_*"/>
<dynamicField name="child_last_*"/>
Здесь вы должны хранить поля 'child_first_1', 'child_last_1', 'child_first_2', 'child_last_2 'и т. д. Опять же, вы должны соотносить значения, но, по крайней мере, у вас есть индекс.С помощью некоторого кода вы можете сделать это прозрачным.
Итог: как гласит Solr wiki : «Solr предоставляет одну таблицу. Хранение набора таблиц базы данных в индексе обычно требует денормализации некоторых изТаблицы. Попытки избежать денормализации обычно терпят неудачу. "Вы должны денормализовать ваши данные в соответствии с вашими поисковыми потребностями.
ОБНОВЛЕНИЕ: начиная с версии 4.5 Solr и непосредственно поддерживает вложенные документы: https://cwiki.apache.org/confluence/display/solr/Other+Parsers#OtherParsers-BlockJoinQueryParsers