Aujourd'hui, nous allons vous montrer en quelques lignes comment utiliser le client Java REST d'Elasticsearch.
La première chose à faire est d'importer le client dans votre projet :
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>6.0.0</version>
</dependency>
Supposons que vous ayez une instance d'Elasticsearch démarrée localement et s'exécutant sur http://localhost:9200. Vous devez initialiser le client comme suit :
RestHighLevelClient client = new RestHighLevelClient(
RestClient.builder(HttpHost.create("http://127.0.0.1:9200")));
Pour indexer des documents, vous devez en fournir une version JSON. Par exemple, avec la librairie Jackson, vous pouvez transformer votre objet ainsi :
byte[] bytes = mapper.writeValueAsBytes(object);
Pour l'indexer, vous pouvez soit faire des opérations unitaires :
client.index(new IndexRequest("index", "doc").source(bytes, XContentType.JSON));
Soit utiliser l'API BULK, plus efficace pour un traitement par lot:
// Initialisation du Bulk Processor
BulkProcessor bulkProcessor = new BulkProcessor.Builder(client::bulkAsync, new BulkProcessor.Listener() {
@Override public void beforeBulk(long executionId, BulkRequest request) { }
@Override public void afterBulk(long executionId, BulkRequest request, BulkResponse response) { }
@Override public void afterBulk(long executionId, BulkRequest request, Throwable failure) { }
}, new ThreadPool(Settings.builder().put(Node.NODE_NAME_SETTING.getKey(), "high-level-client").build()))
.setBulkActions(10000)
.setFlushInterval(TimeValue.timeValueSeconds(5))
.build();
Les opérations d'indexation s'écrivent du coup ainsi :
bulkProcessor.add(new IndexRequest("index", "doc").source(bytes, XContentType.JSON));
La configuration du BulkProcessor
est telle que tous les 10000 documents (.setBulkActions(10000)
), le contenu du bulk processor sera envoyé à Elasticsearch en une seule requête. Si il y a moins de 10000 documents en attente, le bulk sera tout de même exécuté au bout de 5 secondes (.setFlushInterval(TimeValue.timeValueSeconds(5))
).
Pour chercher vos documents, vous devez utiliser l'API search
et utiliser l'une des requêtes exposées par la classe QueryBuilders :
// Construire une query
QueryBuilder query = QueryBuilders.matchAllQuery();
// Exécuter la recherche
SearchResponse response = client.search(new SearchRequest("index")
.source(new SearchSourceBuilder()
.query(query)
));
L'object response
contient toutes les informations nécessaires, comme par exemple le nombre total de documents qui correspondent à votre requête response.getHits().getTotalHits()
. Une version JSON de la réponse est disponible avec response.toString()
.
Pour plus d'informations, veuillez consulter la documentation du client Java REST.