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

Elasticsearch (RubyShift 2013)

4e515deb518e9195f0dc45ec2af6a541?s=47 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

4e515deb518e9195f0dc45ec2af6a541?s=128

Karel Minarik

September 28, 2013
Tweet

Transcript

  1. Karel Minařík @karmiq elasticsearch

  2. What is Elasticsearch?

  3. 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; …
  4. Demo http://git.io/hello-elasticsearch-ruby

  5. http://stackoverflow.com total title date author rating answers result ordering query

    syntax excerpt highlight
  6. http://stackexchange.com/sites?view=list#questions

  7. Schema-less is not schema-free

  8. 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: ..." }
  9. 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
  10. 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
  11. http://git.io/stackexchange-elasticsearch Demo

  12. thanks!