Printemps de Données Elastic Search avec des Champs Imbriqués et de la cartographie

Je suis à l'aide de spring-data-elasticsearch et elasticsearch ensemble à la requête de documents. J'aimerais faire des requêtes imbriquées sur les documents imbriqués.

J'ai cela 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
}

Et

class B { //some normal pojo }

Lorsque je laisse printemps-données de la cartographie, j'obtiens :

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

Quand je suis en train d'interroger le document, j'ai le classique interne vs documents imbriqués les problèmes et il ne reconnaît pas l'élément imbriqué.

Quand j'essaie de mettre à jour la cartographie de l'utilisation imbriquée document-je obtenir "ne peut pas être modifié à partir de la non-imbriquées à imbriquée".

Devrais-je dire de printemps-données-es en quelque sorte que @NestedField => type: "imbriqués" dans la cartographie ? Est-il un moyen pour ajouter un mappage personnalisé pour le printemps-les données de l'index, & de la cartographie ?

Aussi, je suis de l'initialisation d'index via :

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

Et puis l'interrogation à l'aide de printemps-référentiel de données :

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);

Ici le res a 0 élément dans l'Itérable, mais par le biais de REPOS, je reçois le message d'erreur sur la requête imbriquée pas pris en charge (comme je ne l'ai pas dans la cartographie).

enfin,

N'Printemps-Données-ElasticSearch prend en charge imbriqués les mappages par ES QueryBuilders API ? Quand dois-je faire que la cartographie qui se passe ?

OriginalL'auteur Alexis | 2013-09-16