Sto usando spring-data-elasticsearch e elasticsearch insieme per interrogare i documenti. Mi piacerebbe fare query annidate su documenti annidati.Ricerca elastica dati primaverili con campi nidificati e mappatura
ho questo in 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
}
E
class B { // some normal pojo }
Quando ho lasciato a molla dati faccio la mappatura, ottengo:
"a": {
"properties": {
"bs": {
"properties": {
"someBProperty": {
"type": "string"
},
"BId": {
"type": "string"
}
}
},
"id": { ... },
...
}
Quando sto cercando di interrogare il documento, ottengo i classici problemi di documenti interni vs nidificati e non riconosce l'elemento nidificato.
Quando si tenta di aggiornare la mappatura per utilizzare il documento annidato, "non può essere modificato da non annidato a nidificato".
Devo dire in qualche modo ai dati di primavera che @NestedField => tipo: "annidato" nella mappatura? C'è un modo per aggiungere la mappatura personalizzata ai dati primaverili quando crea la mappatura dell'indice &?
Inoltre, sto in fase di inizializzazione indici via:
elasticsearchTemplate.deleteIndex(A.class);
elasticsearchTemplate.createIndex(A.class);
elasticsearchTemplate.putMapping(A.class);
elasticsearchTemplate.refresh(A.class,true);
E poi l'interrogazione utilizzando repository primavera-dati:
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);
Qui le res ha 0 elemento del Iterable ma via REST ho la errore sulla query nidificata non supportata (poiché non la ho nella mappatura).
infine,
fa primavera-Data-elasticsearch supporta mappature annidati via ES QueryBuilders API? Quando dovrei fare che la mappatura avvenga?
ti invitiamo a suggerire un metodo che utilizza @ query di annotazione per la stessa. –
Puoi suggerire un metodo per disattivare _source usando i dati di primavera? – Sachin
SearchQuery searchQuery = new NativeSearchQueryBuilder(). WithFields() metodo se si desidera solo campi specifici. –