+39 050 751 9999 info@seacom.it

Oggi vi mostreremo in poche parole come utilizzare il client REST Java Elasticsearch.

La prima cosa da fare è importare il client nel tuo progetto:

<dependency>

    <groupId>org.elasticsearch.client</groupId>

    <artifactId>elasticsearch-rest-high-level-client</artifactId>

    <version>6.0.0</version>

</dependency>

Supponiamo di avere un’istanza di Elasticsearch avviata localmente e in esecuzione su http: // localhost: 9200 . È necessario inizializzare il client come segue:

RestHighLevelClient client = new RestHighLevelClient(

                RestClient.builder(HttpHost.create(“http://127.0.0.1:9200”)));

Per indicizzare i documenti, è necessario fornire una versione JSON. Ad esempio, con la libreria di Jackson, puoi trasformare il tuo oggetto come segue:

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

Per indicizzarlo, puoi eseguire operazioni unitarie:

client.index(new IndexRequest(“index”, “doc”).source(bytes, XContentType.JSON));

Utilizza l’API BULK, più efficiente per l’elaborazione in batch:

// Initialization of 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();

Le operazioni di indicizzazione sono scritte come segue:

bulkProcessor.add(new IndexRequest(“index”, “doc”).source(bytes, XContentType.JSON));

La configurazione BulkProcessor è tale che tutti i 10000 documenti ( .setBulkActions(10000)) verranno inviato a Elasticsearch in una singola query. Se ci sono meno di 10000 documenti in attesa, la maggior parte verrà comunque eseguita dopo 5 secondi (.setFlushInterval(TimeValue.timeValueSeconds(5))).

Per cercare i tuoi documenti, devi utilizzare l’API search e utilizzare una delle query della classe QueryBuilders:

// Costruire una query

QueryBuilder query = QueryBuilders.matchAllQuery();

// Esecuzione della ricerca

SearchResponse response = client.search(new SearchRequest(“index”)

        .source(new SearchSourceBuilder()

                .query(query)

        ));

L’oggetto response contiene tutte le informazioni necessarie, ad esempio il numero totale di documenti corrispondenti alla query response.getHits().getTotalHits(). Una versione JSON della risposta è disponibile con response.toString().

 

 

 

 

 

Articolo Originale a cura di David Pilato

Contatta Seacom

Vuoi rimanere aggiornato su tutte novità Elastic o richiedere una consulenza a Seacom?
Visita la pagina dedicata, oppure

Contattaci
mautic is open source marketing automation