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?