Сериализация дочерних документов, полей Spring Data Solr - PullRequest
1 голос
/ 07 октября 2019

Я пытаюсь сохранить вложенные документы в 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.

...