Мне нужно настроить вложенные сущности, которые импортируются через DIH. Между пользователем и адресом находится количество элементов от одного до многих (у пользователя много адресов).
Это наше определение импорта в конфигурации данных. xml
<document>
<entity name="user" query="...">
<field column="id" name="id" />
<field column="code" name="code" />
// next fields of user
<entity name="address" child="true" query="..." where="user_id=user.id">
<field column="id" name="id" />
<field column="city" name="city" />
// ... next fields of address
</entity>
</entity>
</document>
и схема. xml такая конфигурация:
// user fields
<field name="id" type="long" indexed="true" stored="true" />
<field name="name" type="string" indexed="true" stored="true" />
<field name="code" type="string" indexed="true" stored="true" />
// ...
// address fields
<field name="address" type="string" indexed="true" multiValued="true" stored="true" />
<field name="address.id" type="long" indexed="true" stored="true" />
<field name="address.city" type="string" indexed="false" stored="true" />
// ...
Это решение приводит к тому, что адресный объект не импортируется. Спасибо за любой совет.
EDIT: Я также нашел много журналов предупреждений Error creating document : SolrInputDocument(fields: [user_id=122, ... _version_=1671840418228076544,​ _root_=00924553002],​ children: [SolrInputDocument(fields: [address_id=1,​ _root_=00924553002,​ _version_=1671840418228076544]),​ SolrInputDocument(fields: [address_id=20,​ _root_=00924553002,​ _version_=1671840418228076544])])
EDIT 2: Журналы по умолчанию в приложении скрывают ошибку. Я проверил журналы сервера на машине и обнаружил эту ошибку: org.apache.solr.common.SolrException: [doc=null] missing required field: code at org.apache.solr.update.DocumentBuilder.toDocument(DocumentBuilder.java:245)
В схеме. xml У меня это поле установлено как идентификатор пользователя, но у детей этого поля нет. Затем я попытался добавить поле кода в качестве псевдонима для идентификатора и обнаружил еще одну ошибку, которая сообщает, что в обязательных полях, которые используются в родительском объекте (пользователе), отсутствует значение. Эти условия применялись также к вложенным объектам. Поэтому я попытался также удалить это условие из этих полей. После этого импорт был выполнен, но когда я выполняю select, все объекты находятся на одном уровне. Solr импортировал его как плоский.
Это ожидаемый результат выбора:
{
"reponse": [
{
"id": 1,
"code": "tsdx242-234",
"first_name": "Michael",
"last_name": "Sprox",
"addresses": [
{
"id": 44,
"city": "Paris",
"street": "Champs-Elysees"
},
{
"id": 24,
"city": "Budapest",
"street": "Akácfa utca"
}
]
},
{
"id": 2,
"code": "xx45982-114",
"first_name": "Petra",
"last_name": "Jurka",
"addresses": [
{
"id": 31,
"city": "Vienna",
"street": "Karlsplatz"
},
{
"id": 44,
"city": "Paris",
"street": "Champs-Elysees"
}
]
}
]
}
Но он дает это, смешанные пользователи и адреса в одном файле:
{
"response": [
{
"id": 44,
"city": "Paris",
"street": "Champs-Elysees"
},
{
"id": 24,
"city": "Budapest",
"street": "Akácfa utca"
},
{
"id": 31,
"city": "Vienna",
"street": "Karlsplatz"
},
{
"id": 1,
"code": "tsdx242-234",
"first_name": "Michael",
"last_name": "Sprox"
},
{
"id": 2,
"code": "xx45982-114",
"first_name": "Petra",
"last_name": "Jurka"
}
]
}