Ответ 1
Вы можете моделировать это по-разному, в зависимости от потребностей поиска/огранки. Обычно вы будете использовать многозначные или динамические поля. В следующих примерах я буду опускать тип поля, индексированные и сохраненные флаги:
<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 предоставляет одну таблицу. Хранение таблиц набора данных в индексе обычно требует денормализации некоторых из таблицы. Попытки избежать денормализации обычно терпят неудачу". Это зависит от вас, чтобы денормализовать ваши данные в соответствии с вашими потребностями поиска.
UPDATE: Начиная с версии 4.5 или около того Solr поддерживает вложенные документы напрямую: https://cwiki.apache.org/confluence/display/solr/Other+Parsers#OtherParsers-BlockJoinQueryParsers