Я пытаюсь сохранить вложенные документы в solr. Я пробовал аннотации Field(child= true)
и @Childdocument
.
С @Field(child=true)
& @ChildDocument
я получаю
[doc = null] отсутствует обязательное поле: id, повтор = 0 commError = false errorCode = 400
Я пытался @Indexed
с @Id
. Также пытался указать required = false
.
@Service
public class NavigationMapper implements DocumentMapper<Navigation> {
@Override
public SchemaDefinition getSchemaDefinition() {
SchemaDefinition sd = new SchemaDefinition();
sd.setName(Navigation.class.getSimpleName());
sd.setFields(new ArrayList<>());
for(Method method : Navigation.class.getDeclaredMethods()){
if(method.getName().startsWith("get") && method.getParameterCount() <= 0){
SchemaDefinition.FieldDefinition fd = new SchemaDefinition.FieldDefinition();
String fieldName = method.getName().replace("get", "");
fd.setName(fieldName.replace(fieldName.charAt(0), fieldName.toLowerCase().charAt(0)));
fd.setRequired(false);
fd.setStored(true);
sd.getFields().add(fd);
}
}
return sd;
}
С помощью @Field
я получаю имя пакета в сохраненном значении: activePage
:
["org.apache.solr.common.SolrInputField: activePage =Page (id = blt6134c9cf711a7c27,
и получите ошибку ниже, когда я пытаюсь читать в своем контроллере отдыха.
Не найден конвертер, способный конвертировать из типа [java.lang.String] набрать [com.blizzard.documentation.data.shared.model.page.Page]
Я много читал об этом и не смог успешно настроить и сохранитьвложенный документ в SolrDb. Я прочитал, что я мог бы использовать SolrJConverter для этого, но также не удачно с ним. Есть ли какой-нибудь рабочий пример, который я могу сослаться или учебник об этой функции?
@Data
@SolrDocument(collection = "Navigation")
public class Navigation implements Serializable {
@Id
//@Indexed(required = false)
private String id;
@Field
@Indexed(name = "path", type = "string")
private String path;
@ChildDocument
private Page navigationRoot;
@ChildDocument
private Page activePage;
}
@Data
@SolrDocument(collection = "Page")
public class Page implements Serializable {
@Id
// @Indexed(name= "id", type="string", required = false)
private String id;
@Field
@Indexed(name= "path", type="string")
private String path;
@Field
private PageContentType contentType;
@ChildDocument
private List<Page> children;
@Indexed("root_b")
private boolean root;
}
Я ожидаю, чтосохранить вложенный документ в solrDb.