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

Elasticsearch (RubyShift 2013)

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.
Avatar for Karel Minarik Karel Minarik
September 28, 2013

Elasticsearch (RubyShift 2013)

General introduction to Elasticsearch at the RubyShift 2013 conference.

Download the source code for demos:

* http://git.io/hello-elasticsearch-ruby
* http://git.io/stackexchange-elasticsearch

Avatar for Karel Minarik

Karel Minarik

September 28, 2013
Tweet

More Decks by Karel Minarik

Other Decks in Technology

Transcript

  1. Elasticsearch Flexible REST API & JSON documents; API driven configuration;

    scripting; index aliases; … Scalable Distributed; built for cloud; … Versatile Search; analytics; storage; alerting; text clustering; NLP … Open Open source; community; plugins; …
  2. Flat structure An index per model. "Common search" scenario. Cannot

    cross-search. users questions answers comments { "name" : "John", "location" : "..." } { "title" : "My First Question", "body" : "..." } { "title" : "My First Answer", "body" : "..." } { "body" : "Just a comment: ..." }
  3. Denormalized Cheap to query, expensive to update. { "title": "My

    first question", "body": "...", "user": { "name": "John", "location": "..." }, "comments": [ { "text": "Good question!", "user": { "name": "Robert", "location": "..." } } ] } questions answers
  4. Compromised denormalisation Some properties don't change (user_name). Some can either

    be "freezed" or we have to pay the price of the mass update (user_location). { "id" : "john", "name" : "John", "location" : "..." } myapp user question answer { "id" : 1, "title" : "My first question", "body" : "...", "user" : { "name" : "John", "location" : "..." }, "comments" : [ { "body" : "...", "user" : { ... } }, { "body" : "...", "user" : { ... } } ] } { "id" : 2, "title" : "My first answer", "parent_id" : 1, "user" : { "name" : "Robert", "location" : "..." }, "comments" : [ { "body" : "...", "user" : { ... } } ] } parent_id comment comment