Sto utilizzando l'API Java per Elasticsearch. Avendo salvato le entità in indici, è possibile recuperarle insieme alla fonte completa. Tuttavia, voglio solo recuperare i campi selezionati, e questo non funziona.Recupero di campi specifici utilizzando l'API Java Elasticsearch
Il codice di esempio folowing:
SearchResponse response = client.prepareSearch("my-index")
.setTypes("my-type")
.setSearchType(SearchType.QUERY_AND_FETCH)
.setFetchSource(true)
.setQuery(QueryBuilders.termsQuery("field1", "1234"))
.addFields("field1")
.execute()
.actionGet();
for (SearchHit hit : response.getHits()){
Map<String, SearchHitField> fields = hit.getFields();
System.out.println(fields.size());
Map map = hit.getSource();
map.toString();
}
sarà recuperare le entità corretti dall'indice, compreso il sorgente completo.
Ad esempio, questo è un frammento della risposta:
"hits" : {
"total" : 1301,
"max_score" : 0.99614644,
"hits" : [ {
"_index" : "my-index",
"_type" : "my-type",
"_id" : "AU2P68COpzIypBTd80np",
"_score" : 0.99614644,
"_source":{"field1":"1234", ...}]}
}, {
Tuttavia, mentre response.getHits()
restituisce il numero atteso di colpi, il fields
e source
all'interno di ogni colpo è vuoto.
mi aspetto ogni colpo per contenere il campo specificato nella riga:
.addFields("field1")
Commentando la linea
.setFetchSource(true)
farà sì che la risposta non includere la fonte a tutti.
La versione di elasticsearch è 1.5.0
Quello che segue è l'esperto di dipendenza API Java:
<dependency>
<groupId>com.sksamuel.elastic4s</groupId>
<artifactId>elastic4s_2.11</artifactId>
<version>1.5.5</version>
</dependency>
obiously, per motivi di prestazioni, non voglio avere per recuperare la completa entità. Qualcuno sa come limitare il recupero ai campi selezionati? Grazie
@ user1052610 sei riuscito a utilizzare la soluzione suggerita? – Val
Non ha funzionato per me con ElasticSearch 5.x. :( Restituisce un campo vuoto "_source" nella risposta e non copia "campo1" come un campo reale – cs94njw
@ cs94njw Questo non dovrebbe essere cambiato [secondo la fonte] (https: // github. com/elastico/elasticsearch/blob/c98e3f60f78fb47ae7482d96952f2dbabd1d6d49/core/src/main/java/org/elasticsearch/action/get/GetRequestBuilder.java # L127-L131). Sentiti libero di creare una nuova domanda facendo riferimento a questo, quindi possiamo ordinare fuori. – Val