Slide 1

Slide 1 text

elasticsearch Java API Ein kurzer Überblick [email protected] [email protected]

Slide 2

Slide 2 text

•Java Library für den Zugriff auf elasticsearch •Alternative zur sprachunabhängigen REST API •Alle Operationen können auch asynchron ausgeführt werden •Verbindung zu elasticsearch erfolgt über dieselbe Schnittstelle, über die auch die einzelnen elasticsearch Nodes kommunizieren (Transport Protocol) •Fluent API auf Basis verschiedener Builder-Klassen •Loadbalancing und Failover funktioniert automatisch elasticsearch Java API 2

Slide 3

Slide 3 text

Mit elasticsearch verbinden 3

Slide 4

Slide 4 text

Mit elasticsearch verbinden 4 Settings settings = Settings.builder() .put("cluster.name", "myEsCluster") .build(); InetSocketTransportAddress esHostAddress = new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9300); TransportClient esClient = TransportClient.builder() .settings(settings) .build() .addTransportAddress(esHostAddress) .addTransportAddress(…); # add all data or client nodes Über den TransportClient mit elasticsearch verbinden

Slide 5

Slide 5 text

Indizes anlegen 5

Slide 6

Slide 6 text

CreateIndexResponse response = esClient.admin().indices().prepareCreate(„myIndex").get(); if (!response.isAcknowledged()) { throw new Exception("Index could not be created."); } Indizes anlegen 6 Neuen Index anlegen

Slide 7

Slide 7 text

Dokumente einfügen 7

Slide 8

Slide 8 text

String document = "{" + "\"firstname\":\"Frieda\"," + "\"lastname\":\"Musterfrau\"," + "\"age\":31" + "}"; IndexResponse response = esClient.prepareIndex(„myIndex“, „myType“, „1") .setSource(document) .get(); Dokumente einfügen 8 Dokument in Form eines JSON Strings einfügen

Slide 9

Slide 9 text

Map document = new HashMap(); document.put("firstname", "Hans"); document.put("lastname", "Hansson"); document.put("age", 36); IndexResponse response = esClient.prepareIndex(„myIndex“, „myType“, „1") .setSource(document) .get(); Dokumente einfügen 9 Dokument in Form einer Map einfügen

Slide 10

Slide 10 text

XContentBuilder documentBuilder = jsonBuilder() .startObject() .field("firstname", "Max") .field("lastname", "Mustermann") .field("age", 42) .endObject(); IndexResponse response = esClient.prepareIndex(„myIndex“, „myType“, „1") .setSource(document) .get(); Dokumente einfügen 10 Dokument in Form des jsonBuilder Helpers einfügen

Slide 11

Slide 11 text

import com.fasterxml.jackson.databind.*; ObjectMapper mapper = new ObjectMapper(); byte[] document = mapper.writeValueAsBytes(myBeanInstance); IndexResponse response = esClient.prepareIndex(„myIndex“, „myType“, „1") .setSource(document) .get(); Dokumente einfügen 11 Dokument in Form einer Java Bean einfügen

Slide 12

Slide 12 text

Dokumente suchen 12

Slide 13

Slide 13 text

SearchResponse response = esClient.prepareSearch() .setIndices("myIndex") .setTypes("myType") .setQuery(matchAllQuery()) .get(); for (SearchHit hit : response.getHits()) { //do something } Dokumente suchen 13 Alle Dokumente abfragen

Slide 14

Slide 14 text

QueryBuilder lastnameMustermann = matchQuery("lastname", "Mustermann"); SearchResponse response = esClient.prepareSearch() .setIndices("myIndex") .setTypes("myType") .setQuery(lastnameMustermann) .get(); for (SearchHit hit : response.getHits()) { //do something } Dokumente suchen 14 Alle Dokumente mit Nachnamen „Mustermann“ abfragen

Slide 15

Slide 15 text

QueryBuilder firstnameMax = matchQuery("firstname", "Max"); QueryBuilder lastnameMustermann = matchQuery("lastname", "Mustermann"); QueryBuilder nameMaxMustermann = boolQuery() .must(firstnameMax) .must(lastnameMustermann); SearchResponse response = esClient.prepareSearch() .setIndices("myIndex") .setTypes("myType") .setQuery(nameMaxMustermann) .get(); for (SearchHit hit : response.getHits()) { //do something } Dokumente abfragen 15 Alle Dokumente mit Vorname „Max“ und Nachname „Mustermann“

Slide 16

Slide 16 text

Suchergebnisse aggregieren 16

Slide 17

Slide 17 text

QueryBuilder queryBuilder = matchAllQuery(); AvgBuilder aggregationBuilder = avg("averageAge") .field("age"); SearchResponse response = esClient.prepareSearch(indexName) .setQuery(queryBuilder) .addAggregation(aggregationBuilder) .execute() .actionGet(); double avgAge = response.getAggregations().get(„averageAge“).getValue(); Suchergebnisse aggregieren 17 Durchschnittsalter aller Personen berechnen

Slide 18

Slide 18 text

[email protected] Fragen? 18