Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Elasticsearch Java API via Transportclient

Elasticsearch Java API via Transportclient

Hendrik Saly

July 06, 2016
Tweet

More Decks by Hendrik Saly

Other Decks in Programming

Transcript

  1. •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
  2. 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
  3. 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
  4. Map<String, Object> document = new HashMap<String, Object>(); 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
  5. 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
  6. 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
  7. 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
  8. 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“
  9. 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