Búsqueda elástica de datos de primavera con campos anidados y mapeo

Estoy usando Spring-data-elasticsearch y elasticsearch juntos para consultar documentos. Me gustaría hacer consultas anidadas en documentos anidados.

Tengo esto en java:

@Document(indexName = "as", type = "a", indexStoreType = "memory", shards = 1, replicas = 0, refreshInterval = "-1")
class A {

     @Id
     private String Id;

     @Field(type = String, index = analyzed, store = true)
     private String field1;

     // ... Many more Fields.

     @NestedField(type = FieldType.Object, index = analyzed, store = true, dotSuffix = "accounts")
     private List<B> bs;

     // ... getters and setters
}

Y

class B { // some normal pojo }

Cuando dejo que Spring-Data haga el mapeo, obtengo:

"a": {
    "properties": {
        "bs": {
            "properties": {
                "someBProperty": {
                    "type": "string"
                },
                "BId": {
                    "type": "string"
                }
            }
        },
        "id": { ... },
        ...
}

Cuando intento consultar el documento, obtengo los problemas clásicos de los documentos internos y los documentos anidados y no reconoce el elemento anidado.

Cuando intento actualizar la asignación para usar un documento anidado, obtengo "no se puede cambiar de no anidado a anidado".

¿Debo decirle a spring-data-es de alguna manera que @NestedField => escribe: "anidado" en el mapeo? ¿Hay una manera de agregar mapeo personalizado a los datos de primavera cuando crea índice y mapeo?

Además, estoy inicializando índices a través de:

elasticsearchTemplate.deleteIndex(A.class);
elasticsearchTemplate.createIndex(A.class);
elasticsearchTemplate.putMapping(A.class);
elasticsearchTemplate.refresh(A.class,true);

Y luego consultar utilizando el repositorio de datos de primavera:

QueryBuilder builder = QueryBuilders.nestedQuery( "bs", QueryBuilders.boolQuery().must(QueryBuilders.matchQuery("as.field1", "A1")).must(QueryBuilders.matchQuery("as.field2", "B1")));

Iterable<DenormalizedRelationshipDocument> res = aRepository.search(builder);

Aquí el res tiene un elemento 0 en el Iterable pero a través de REST me sale el error en la consulta anidada no es compatible (ya que no lo tengo en el mapeo).

finalmente,

¿Spring-Data-ElasticSearch admite asignaciones anidadas a través de la API de ES QueryBuilders? ¿Cuándo debo hacer que el mapeo suceda?

Respuestas a la pregunta(1)

Su respuesta a la pregunta