# Dec 4th, 2017: \[FR\]\[Elasticsearch\] Advanced REST Java Client

**URL:** <https://discuss.elastic.co/t/dec-4th-2017-fr-elasticsearch-advanced-rest-java-client/108340>\
**Category:** Advent Calendar\
**Created:** [December 3, 2017, 1:00pm UTC](https://discuss.elastic.co/t/dec-4th-2017-fr-elasticsearch-advanced-rest-java-client/108340 "2017-12-03T13:00:26Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![dadoonet](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/dadoonet/32/137187_2.png) [@dadoonet](https://discuss.elastic.co/u/dadoonet)\
**Post date:** [December 3, 2017, 1:00pm UTC](https://discuss.elastic.co/t/dec-4th-2017-fr-elasticsearch-advanced-rest-java-client/108340/1 "2017-12-03T13:00:26Z")

</div>

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 :

```xml
<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](http://localhost:9200). Vous devez initialiser le client comme suit :

```java
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 :

```java
byte[] bytes = mapper.writeValueAsBytes(object);

```

Pour l'indexer, vous pouvez soit faire des opérations unitaires :

```java
client.index(new IndexRequest("index", "doc").source(bytes, XContentType.JSON));

```

Soit utiliser l'[API BULK](https://www.elastic.co/guide/en/elasticsearch/client/java-rest/6.0/java-rest-high-document-bulk.html), plus efficace pour un traitement par lot:

```java
// 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 :

```java
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](https://www.elastic.co/guide/en/elasticsearch/client/java-rest/6.0/java-rest-high-query-builders.html) :

```java
// 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](https://www.elastic.co/guide/en/elasticsearch/client/java-rest/6.0/index.html).

---

<div class="post-metadata">

**Author:** ![zezz](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/zezz/32/17169_2.png) [@zezz](https://discuss.elastic.co/u/zezz)\
**Post date:** [December 8, 2017, 7:50pm UTC](https://discuss.elastic.co/t/dec-4th-2017-fr-elasticsearch-advanced-rest-java-client/108340/2 "2017-12-08T19:50:21Z")

</div>

N'oubliez pas le warning dans cette [page](https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/client.html) : vous avez jusqu'à la v8 pour bien assimiler cet article. Ca fera sans doute encore 2 calendriers de l'Avent 🙂

---

<div class="post-metadata">

**Author:** ![warkolm](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/warkolm/32/39224_2.png) [@warkolm](https://discuss.elastic.co/u/warkolm)\
**Post date:** [August 23, 2018, 8:31am UTC](https://discuss.elastic.co/t/dec-4th-2017-fr-elasticsearch-advanced-rest-java-client/108340/3 "2018-08-23T08:31:18Z")

</div>


