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

Elasticsearch

 Elasticsearch

Elasticsearch introduction at the Mexico City JVM Group.

Domingo Suarez Torres

April 27, 2016
Tweet

More Decks by Domingo Suarez Torres

Other Decks in Programming

Transcript

  1. NO

  2. NO

  3. NO

  4. NO

  5. YES

  6. Lucene History • Douglass Read "Doug" Cutting wrote Lucene in

    1999 • Doug also is the author of Hadoop • In Lucene other projects came to life • Mahout • Tika • Nutch
  7. • Lucene is an open-source Java full-text search library which

    makes it easy to add search functionality to an application or website.
  8. Inverted index • Lucene creates a data structure where it

    keeps a list of where each word belongs.
  9. Features • Real-Time Data. I (Domingo) say near Real-Time Data.

    • Massively Distributed • High Availability • Full-Text Search • Document-Oriented • Schema-Free • Developer-Friendly, RESTful API • Extensible via plugins
  10. Concepts • Cluster • Node • Index • Shard &

    Replica • Type • Mapping • Document
  11. Sharding is crucial • Shard is a physical Lucene index

    • # documents in a Lucent index is 2 billion docs. • When you create a index you have to declare the # shards, you can’t change later. Beware! • Don’t try to over-sharding your index! Beware!
  12. Creating an index $ http put :9200/my_index/ settings:='{ "index" :

    { "number_of_shards" : 3, "number_of_replicas" : 0 } }' PUT /my_index/ HTTP/1.1 Accept: application/json Accept-Encoding: gzip, deflate Connection: keep-alive Content-Length: 73 Content-Type: application/json Host: localhost:9200 User-Agent: HTTPie/0.9.3 { "settings": { "index": { "number_of_replicas": 0, "number_of_shards": 3 } } } HTTP/1.1 200 OK Content-Length: 21 Content-Type: application/json; charset=UTF-8 { "acknowledged": true }
  13. Creating a type $ http put :9200/my_index/_mapping/my_document properties:='{ "user_name": {

    "type": "string" } }' -v PUT /my_index/_mapping/my_document1 HTTP/1.1 Accept: application/json Content-Length: 49 Content-Type: application/json { "properties": { "user_name": { "type": "string" } } } HTTP/1.1 200 OK Content-Length: 21 Content-Type: application/json; charset=UTF-8 { "acknowledged": true }
  14. Indexing $ http :9200/my_index/my_document user_name="Domingo Suarez" -v POST /my_index/my_document1 HTTP/1.1

    Content-Length: 31 Content-Type: application/json { "user_name": "Domingo Suarez” } HTTP/1.1 201 Created Content-Length: 149 Content-Type: application/json; charset=UTF-8 { "_id": "AVRaEeBK3Lbw2oDzSIWN", "_index": "my_index", "_shards": { "failed": 0, "successful": 1, "total": 1 }, "_type": "my_document1", "_version": 1, "created": true }
  15. Search $ http :9200/my_index/my_document/_search?q=user_name:Domingo HTTP/1.1 200 OK Content-Length: 657 Content-Type:

    application/json; charset=UTF-8 { "_shards": { "failed": 0, "successful": 3, "total": 3 }, "hits": { "hits": [ { "_id": "AVRaEdPJ3Lbw2oDzSIWM", "_index": "my_index", "_score": 0.625, "_source": { "user_name": "Domingo Suarez" }, "_type": "my_document1" } ], "max_score": 0.625, "total": 1 }, "timed_out": false, "took": 5 }