SlideShare une entreprise Scribd logo
1  sur  42
Rails and the Apache SOLR Search Engine
Agenda
1. Why?
2. Technology Stack
3. Our First App
• Demo 
4. Complications
5. Conclusions
Part 1:                    Why?
Part 1:                    Why?




      “Why the Lucky Stiff” at a conference in 2006…
        - innovative, eccentric, suddenly retired from public life…
Why Me?
Well, I’ve been doing Search since 1998…

  • CheckPoint – Online tax information for CPA’s

  • Legislate – Everything you ever wanted to know 
    about legislation – more than a million docs

  • National Council of Teachers of Mathematics –
    Online journals

  • Grab Networks – Searching news video summaries

  • Pfizer – Drug documentation
A Typical Information Site
Why We Need Search
• “A feature doesn’t exist if users can’t find it.”
       ‐ Jeff Atwood, co‐creator of Stack Overflow
       ‐ The same principle applies to content
• Content costs money
       ‐ If people can’t find it, your money is wasted
• The Long Tail
       ‐ More.content should be == More.traffic
Part 2:
 Technology
   Stack
Lucene is a Toolbox…        SOLR is a Search Server…
•   Indexing                •   With API’s
•   Searching               •   Hit Highlighting
•   Spell‐checking          •   Faceted Searches
•   Hit Highlighting        •   Caching
•   Advanced tokenization   •   A Web Admin Interface
Rails and the Apache SOLR Search Engine
SOLR and Lucene need Java 1.4 or higher
Timeline
                             Lucene becomes           Lucene / SOLR
                             top-level Apache            Merger
                             project

Lucene started      SOLR created by                                  Lucene / SOLR
on SourceForge      Yonik Seeley at       Apache SOLR
                                          leaves incubation          3.5 Released
by Doug Cutter      CNET Networks

        Lucene joins the               SOLR donated to
        Apache Jakarta                 Apache Lucene
        product family                 by CNET



 1997        2001          2004    2005    2006    2007       2010      2011
             Sept                  Feb                                  Nov
Search Stack for Our Rails App


                           Rails Web Site


       SOLR                  Sunspot


       Lucene                 rsolr


Dev/Test:   Jetty     Dev/Test:   WEBrick
Production:  Tomcat   Production:  Apache with
                          Phusion Passenger
Rsolr and Sunspot
                           Sunspot provides Ruby‐style 
Rsolr is a SOLR client…      API’s…

•   By Matt Mitchell       • By Andy Lindeman, Nick 
•   Originated Sept 2009     Zadrozny & Mat Brown
•   Reached 1.0 Jan 2011   • Originated Aug 2009
•   Now at Version 1.0.7   • Reached 1.0 Mar 2010
•   Low‐level client       • Now at Version 1.3.1
                           • With Rails or just Ruby
                           • Drop‐in ActiveRecord 
                             support
Part 3: Our First App




Another First…
   The world’s first amphibious lamborghini
A Simple Blog – With Search
                         source 'http://rubygems.org'
• Generate a Rails App
  ‐ rails new demo1      gem 'rails', '3.0.11'
                         gem 'sqlite3'           # Default database
• Configure Gemfile      gem 'will_paginate'
                         gem 'sunspot_rails'     # Sunspot for Rails
  ‐ bundle install
                         group :development do
                          gem 'nifty-generators' # Better scaffolding
                          gem 'sunspot_solr'     # Pre-built SOLR
                         end

                         group :test do
                          gem 'sunspot_solr'     # Pre-built SOLR
                          gem "mocha"            # Testing tool
                         end
                                                              Gemfile
A Simple Blog (2)
• Scaffolding and Database
 ‐ rails g nifty:layout
 ‐ rails g nifty:scaffold Post title:string body:text featured:boolean
 ‐ rake db:migrate
 ‐ Also, remove public/index.html and point root to posts#index


• Populate the SQLite3 Database:
 ‐ sqlite3 development.sqlite3
      > read data.sql      # Loads 100+ blog entries
      > .exit
A Simple Blog (3)
                                                       production:
• SOLR Config File                                      solr:
                                                         hostname: localhost
 ‐ rails generate sunspot_rails:install                  port: 8983
 ‐ Creates config/sunspot.yml                            log_level: WARNING

• Make Post class searchable                           development:
                                                        solr:
  class Post < ActiveRecord::Base                        hostname: localhost
   attr_accessible :title, :body, :featured              port: 8982
   self.per_page = 10                                    log_level: INFO

   searchable do                                       test:
    text :title, :body                                  solr:
    integer :id                                           hostname: localhost
    boolean: featured                                     port: 8981
   end                                                    log_level: WARNING
                                                             /config/sunspot.yml
  end
                                 /app/models/post.rb
A Simple Blog (4)
                                 - solr
• Start SOLR                       - conf
                                   - data
 ‐ rake sunspot:solr:start              - development
                                        - test
 ‐ Creates SOLR directory tree     - pids
   on first start                       - development
                                        - test
• Index Your Data                 SOLR Directory

 ‐ rake sunspot:solr:reindex
                                 solr/data
                                 solr/pids
                                             .gitignore
The Search UI
• We’ve got a web site
• SOLR is running
• We’ve got indexed content

But…

• We need a Search Form
• We need a Search Results page
The Search Form
<%= form_tag(searches_path, :id => 'search-form', :method => :get) do |f| %>
 <span>
  <%= text_field_tag :query, params[:query] %>
  <%= submit_tag 'Search', :id => 'commit' %>
 </span>
<% end %>
                                               /app/views/layouts/_search.html.erb




• Just a simple view partial…
• That’s rendered by the site’s layout
Search Results
resources :searches, :only => [:index]
                                                             config/routes.rb

<% if @posts.present? %>
 <%= will_paginate @posts, :container => false %>

 <table>
  <% for post in @posts %>
    <tr><td"><%= raw(post.title) %></td></tr>
    <tr><td><%= post.body.truncate(300) %></td></tr>
  <% end %>
 </table>

 <%= page_entries_info @posts %>
 <%= will_paginate @posts, :container => false %>

<% else %>
 <p>No search results are available. Please try another search.</p>
<% end %>
                                                app/views/searches/index.html.erb
Search Controller
class SearchesController < ApplicationController

 def index                                      ActiveRecord Search
  if params[:query].present?                    Integration
    search = Post.search {
      fulltext params[:query]
      paginate :page => params[:page].present? ? params[:page] : 1,
                 :per_page => 10
    }
                                               Pagination integrates
    @posts = search.results
                                               w/ will_paginate gem
  else
    @posts = nil
  end
 end

end Security: Params[:query]
    must be scrubbed if it will      app/controllers/searches_controller.rb
    be re-displayed…
What About New Posts?
How do new posts get indexed?

For any model with searchable fields…
   ‐ Sunspot integrates with ActiveRecord
   ‐ Indexing happens automatically on save
Rails and the Apache SOLR Search Engine
In 2006, DHH made a big splash with
his “15‐minute blog with Rails”
This is the…

20‐Minute
 Rails Blog
with Search
Rails and the Apache SOLR Search Engine
Tip: A Clean Start
• In development, sometimes you mess up…
• You can hose up the SOLR indices

Solution:
• Don’t be afraid to blow away the solr dir tree
• “rake sunspot:solr:start” rebuilds the tree
• Just don’t lose any solr/conf changes
Search Weighting
Titles seem more important…can we weight the
title higher than the body?
 search = Post.search {
     fulltext params[:query]
     paginate :page => params[:page].present? ? params[:page] : 1,
                :per_page => 10
  }
                                                           BEFORE

 search = Post.search {
      fulltext params[:query] do
         boost_fields :title => 2.0
      end
      paginate :page => params[:page].present? ? params[:page] : 1,
                 :per_page => 10
    }
                                                            AFTER
Is There a Better Way?
The “boost” can be done at index time…

class Post < ActiveRecord::Base
  searchable do
    text :title, :boost => 2.0
    text :body
    integer :id
    boolean: featured
  end
end
                                  /app/models/post.rb
What About Related Data?
    text :comments do
      comments.map { |comment| comment.body }
    end
                                        /app/models/post.rb




•   Could have used “acts_as_commentable” gem
•   Your “document” is virtual
•   You define it
•   You can reference attributes, methods, etc.
Filtering
   search = Post.search {
     fulltext params[:query] do
       boost_fields :title => 2.0
     end
     with(:featured, true)
   }
                                    /app/controllers/searches_controller.rb




• Text fields are searched
• The boolean “featured” attribute is filtered
• Search returns only featured posts that match 
  the full‐text search criteria
Hit Highlighting
class Post < ActiveRecord::Base                    @search      = Post.search {
  searchable do                                        fulltext params[:query] do
    ...                                                  highlight :body
    text :body, :stored => true                        end
  end                                              }
                                                           /app/controllers/searches_controller.rb
end
                         /app/models/post.rb


@search.hits.each do |hit|                                     Post #1
 puts "Post ##{hit.primary_key}"                                I use *git* on my project
 hit.highlights(:body).each do |highlight|                     Post #2
   puts " " + highlight.format { |word| "*#{word}*" }           the *git* utility is cool
 end
                                                                                       OUTPUT
end
                      /app/views/searches/index.html.erb
Authorization
Just because content is indexed doesn’t mean
a particular user is allowed to see it…

• Search‐enforced access control
  ‐ Access control data stored in index
  ‐ Can be used to filter results 



             (No code, but something to think about…)
Part 5: Conclusions
Is Highly Customizable

Is Easily Added to Any Project

Helps You Leverage Your Content
Is Designed to be an Enterprise 
                 Component



                  Web Server




Database Server   Search Server     Memcache Server


                               A TYPICAL ARCHITECTURE
Is Well Supported
Questions?
 Get the Code: https://github.com/dkeener/rails_solr_demo

 Get the Slides: http://www.keenertech.com/presentations/rails_and_solr



I’m David Keener and you can find me at:

        •   Blog: http://www.keenertech.com
        •   Facebook: http://www.facebook.com/keenertech
        •   Twitter: dkeener2010
        •   Email:  dkeener@keenertech.com
                    david.keener@gd‐ais.com
David Keener

From the Washington DC area.

I’m a software architect for General Dynamics Advanced 
Information Systems, a large defense contractor in the DC area 
now using Ruby, Rails and other open source technologies on  
various projects.

A founder of the RubyNation and DevIgnition Conferences.

Frequent speaker at conferences and user groups, including 
SunnyConf, Scotland on Rails, RubyNation, DevIgnition, etc.
Credits
http://wwwimagebase.davidniblack.com/templates/
http://www.nctm.org – Journal thumbnails
http://www.sciencewallpaper.com/blackboard‐wallpaper/
http://www.flickr.com/photos/pragdave/173649119/lightbox/
http://brooklynlabschool.wordpress.com/2010/02/09/community‐
resources‐february‐2010/
http://www.gadgetlite.com/wp‐
content/uploads/2009/03/amphibious‐lamborghini‐mod.jpg
David Keener speaking at AOL; photo by Edmund Joe
http://www.sciencepoles.org/articles/article_detail/paul_mayewski_
climate_variability_abrupt_change_and_civilization/
No known copyright; received via spam
Ubiquitous iceberg picture on the Internet; no known copyright
http://www.123rf.com/photo_4155512_stack‐of‐stones.html
http://topwalls.net/water‐drop‐splash‐art/
http://en.wikipedia.org/wiki/File:Escher%27s_Relativity.jpg
http://www.graphicsfuel.com/2011/02/3d‐target‐dart‐psd‐icons/

                                              All logos are trademarks of
                                              their associated corporations

Contenu connexe

Tendances

Apache Solr Workshop
Apache Solr WorkshopApache Solr Workshop
Apache Solr WorkshopJSGB
 
REST APIs in Laravel 101
REST APIs in Laravel 101REST APIs in Laravel 101
REST APIs in Laravel 101Samantha Geitz
 
Apache Solr - Enterprise search platform
Apache Solr - Enterprise search platformApache Solr - Enterprise search platform
Apache Solr - Enterprise search platformTommaso Teofili
 
Introduction to Apache Solr.
Introduction to Apache Solr.Introduction to Apache Solr.
Introduction to Apache Solr.ashish0x90
 
Creating a modern web application using Symfony API Platform, ReactJS and Red...
Creating a modern web application using Symfony API Platform, ReactJS and Red...Creating a modern web application using Symfony API Platform, ReactJS and Red...
Creating a modern web application using Symfony API Platform, ReactJS and Red...Jesus Manuel Olivas
 
Scaling Solr with SolrCloud
Scaling Solr with SolrCloudScaling Solr with SolrCloud
Scaling Solr with SolrCloudlucenerevolution
 
Apache Solr! Enterprise Search Solutions at your Fingertips!
Apache Solr! Enterprise Search Solutions at your Fingertips!Apache Solr! Enterprise Search Solutions at your Fingertips!
Apache Solr! Enterprise Search Solutions at your Fingertips!Murshed Ahmmad Khan
 
Hadoop Summit - Interactive Big Data Analysis with Solr, Spark and Hue
Hadoop Summit - Interactive Big Data Analysis with Solr, Spark and HueHadoop Summit - Interactive Big Data Analysis with Solr, Spark and Hue
Hadoop Summit - Interactive Big Data Analysis with Solr, Spark and Huegethue
 
Enterprise search in_drupal_pub
Enterprise search in_drupal_pubEnterprise search in_drupal_pub
Enterprise search in_drupal_pubdstuartnz
 
Solr Recipes Workshop
Solr Recipes WorkshopSolr Recipes Workshop
Solr Recipes WorkshopErik Hatcher
 
Introduction Apache Solr & PHP
Introduction Apache Solr & PHPIntroduction Apache Solr & PHP
Introduction Apache Solr & PHPHiraq Citra M
 
Add Powerful Full Text Search to Your Web App with Solr
Add Powerful Full Text Search to Your Web App with SolrAdd Powerful Full Text Search to Your Web App with Solr
Add Powerful Full Text Search to Your Web App with Solradunne
 
Using WordPress as your application stack
Using WordPress as your application stackUsing WordPress as your application stack
Using WordPress as your application stackPaul Bearne
 
Basics of Solr and Solr Integration with AEM6
Basics of Solr and Solr Integration with AEM6Basics of Solr and Solr Integration with AEM6
Basics of Solr and Solr Integration with AEM6DEEPAK KHETAWAT
 
Rails 3 Beautiful Code
Rails 3 Beautiful CodeRails 3 Beautiful Code
Rails 3 Beautiful CodeGreggPollack
 
Routing 1, Season 1
Routing 1, Season 1Routing 1, Season 1
Routing 1, Season 1RORLAB
 
Rails 3 overview
Rails 3 overviewRails 3 overview
Rails 3 overviewYehuda Katz
 

Tendances (20)

Apache Solr Workshop
Apache Solr WorkshopApache Solr Workshop
Apache Solr Workshop
 
REST APIs in Laravel 101
REST APIs in Laravel 101REST APIs in Laravel 101
REST APIs in Laravel 101
 
Apache Solr - Enterprise search platform
Apache Solr - Enterprise search platformApache Solr - Enterprise search platform
Apache Solr - Enterprise search platform
 
Introduction to Apache Solr.
Introduction to Apache Solr.Introduction to Apache Solr.
Introduction to Apache Solr.
 
Solr Presentation
Solr PresentationSolr Presentation
Solr Presentation
 
Creating a modern web application using Symfony API Platform, ReactJS and Red...
Creating a modern web application using Symfony API Platform, ReactJS and Red...Creating a modern web application using Symfony API Platform, ReactJS and Red...
Creating a modern web application using Symfony API Platform, ReactJS and Red...
 
Scaling Solr with SolrCloud
Scaling Solr with SolrCloudScaling Solr with SolrCloud
Scaling Solr with SolrCloud
 
Apache Solr! Enterprise Search Solutions at your Fingertips!
Apache Solr! Enterprise Search Solutions at your Fingertips!Apache Solr! Enterprise Search Solutions at your Fingertips!
Apache Solr! Enterprise Search Solutions at your Fingertips!
 
Hadoop Summit - Interactive Big Data Analysis with Solr, Spark and Hue
Hadoop Summit - Interactive Big Data Analysis with Solr, Spark and HueHadoop Summit - Interactive Big Data Analysis with Solr, Spark and Hue
Hadoop Summit - Interactive Big Data Analysis with Solr, Spark and Hue
 
Enterprise search in_drupal_pub
Enterprise search in_drupal_pubEnterprise search in_drupal_pub
Enterprise search in_drupal_pub
 
Solr Recipes Workshop
Solr Recipes WorkshopSolr Recipes Workshop
Solr Recipes Workshop
 
Introduction Apache Solr & PHP
Introduction Apache Solr & PHPIntroduction Apache Solr & PHP
Introduction Apache Solr & PHP
 
Add Powerful Full Text Search to Your Web App with Solr
Add Powerful Full Text Search to Your Web App with SolrAdd Powerful Full Text Search to Your Web App with Solr
Add Powerful Full Text Search to Your Web App with Solr
 
JSON in Solr: from top to bottom
JSON in Solr: from top to bottomJSON in Solr: from top to bottom
JSON in Solr: from top to bottom
 
Using WordPress as your application stack
Using WordPress as your application stackUsing WordPress as your application stack
Using WordPress as your application stack
 
Basics of Solr and Solr Integration with AEM6
Basics of Solr and Solr Integration with AEM6Basics of Solr and Solr Integration with AEM6
Basics of Solr and Solr Integration with AEM6
 
Rails 3 Beautiful Code
Rails 3 Beautiful CodeRails 3 Beautiful Code
Rails 3 Beautiful Code
 
Laravel intake 37 all days
Laravel intake 37 all daysLaravel intake 37 all days
Laravel intake 37 all days
 
Routing 1, Season 1
Routing 1, Season 1Routing 1, Season 1
Routing 1, Season 1
 
Rails 3 overview
Rails 3 overviewRails 3 overview
Rails 3 overview
 

En vedette

პრეზენტაცია
პრეზენტაციაპრეზენტაცია
პრეზენტაციაguestf61bbbc
 
The latest in advanced technical Seo
The latest in advanced technical SeoThe latest in advanced technical Seo
The latest in advanced technical SeoMamadigital
 
Uniform Code of Pharmaceuticals Marketing Practices
Uniform Code of Pharmaceuticals Marketing PracticesUniform Code of Pharmaceuticals Marketing Practices
Uniform Code of Pharmaceuticals Marketing PracticesAnup Soans
 
Individual Employment Opp Travel Writer South Africa
Individual Employment Opp Travel Writer South AfricaIndividual Employment Opp Travel Writer South Africa
Individual Employment Opp Travel Writer South AfricaBlogatize.net
 
A Strategic Model for Product Diversification and Broker Revenue Enhancement
A Strategic Model for Product Diversification and Broker Revenue EnhancementA Strategic Model for Product Diversification and Broker Revenue Enhancement
A Strategic Model for Product Diversification and Broker Revenue Enhancementbjgilbert
 
Fotos Tomadas En El Tiempo Exacto
Fotos Tomadas En El Tiempo ExactoFotos Tomadas En El Tiempo Exacto
Fotos Tomadas En El Tiempo Exactoparrochito
 
Millennial Mom's Eating Habits - Infographic Study
Millennial Mom's Eating Habits - Infographic StudyMillennial Mom's Eating Habits - Infographic Study
Millennial Mom's Eating Habits - Infographic StudySheSpeaks Inc.
 
Lillekyla
Lillekyla Lillekyla
Lillekyla Grete
 
افقهاي جديد در تعليم و تربيت اسلامي
افقهاي جديد در تعليم و تربيت اسلاميافقهاي جديد در تعليم و تربيت اسلامي
افقهاي جديد در تعليم و تربيت اسلاميjavadrabbani
 
1234567
12345671234567
1234567zust
 
Ilyan En New
Ilyan En NewIlyan En New
Ilyan En Newilyancom
 
Summary Report For 23 Nov 09 (Final)
Summary Report For 23 Nov 09 (Final)Summary Report For 23 Nov 09 (Final)
Summary Report For 23 Nov 09 (Final)shweetheart
 

En vedette (20)

პრეზენტაცია
პრეზენტაციაპრეზენტაცია
პრეზენტაცია
 
Neutral Point
Neutral PointNeutral Point
Neutral Point
 
The latest in advanced technical Seo
The latest in advanced technical SeoThe latest in advanced technical Seo
The latest in advanced technical Seo
 
Production storyboards
Production storyboardsProduction storyboards
Production storyboards
 
Editing so far
Editing so farEditing so far
Editing so far
 
Uniform Code of Pharmaceuticals Marketing Practices
Uniform Code of Pharmaceuticals Marketing PracticesUniform Code of Pharmaceuticals Marketing Practices
Uniform Code of Pharmaceuticals Marketing Practices
 
Individual Employment Opp Travel Writer South Africa
Individual Employment Opp Travel Writer South AfricaIndividual Employment Opp Travel Writer South Africa
Individual Employment Opp Travel Writer South Africa
 
A Strategic Model for Product Diversification and Broker Revenue Enhancement
A Strategic Model for Product Diversification and Broker Revenue EnhancementA Strategic Model for Product Diversification and Broker Revenue Enhancement
A Strategic Model for Product Diversification and Broker Revenue Enhancement
 
Liberia At A Glance
Liberia At A GlanceLiberia At A Glance
Liberia At A Glance
 
Fotos Tomadas En El Tiempo Exacto
Fotos Tomadas En El Tiempo ExactoFotos Tomadas En El Tiempo Exacto
Fotos Tomadas En El Tiempo Exacto
 
Millennial Mom's Eating Habits - Infographic Study
Millennial Mom's Eating Habits - Infographic StudyMillennial Mom's Eating Habits - Infographic Study
Millennial Mom's Eating Habits - Infographic Study
 
Lillekyla
Lillekyla Lillekyla
Lillekyla
 
Nancy Inq Project
Nancy Inq ProjectNancy Inq Project
Nancy Inq Project
 
Effective Communication Skills
Effective Communication SkillsEffective Communication Skills
Effective Communication Skills
 
Horizon no to gum
Horizon   no to gumHorizon   no to gum
Horizon no to gum
 
افقهاي جديد در تعليم و تربيت اسلامي
افقهاي جديد در تعليم و تربيت اسلاميافقهاي جديد در تعليم و تربيت اسلامي
افقهاي جديد در تعليم و تربيت اسلامي
 
1234567
12345671234567
1234567
 
Ilyan En New
Ilyan En NewIlyan En New
Ilyan En New
 
Summary Report For 23 Nov 09 (Final)
Summary Report For 23 Nov 09 (Final)Summary Report For 23 Nov 09 (Final)
Summary Report For 23 Nov 09 (Final)
 
Art History
Art HistoryArt History
Art History
 

Similaire à Rails and the Apache SOLR Search Engine

Dev8d Apache Solr Tutorial
Dev8d Apache Solr TutorialDev8d Apache Solr Tutorial
Dev8d Apache Solr TutorialSourcesense
 
Introduction to Rails - presented by Arman Ortega
Introduction to Rails - presented by Arman OrtegaIntroduction to Rails - presented by Arman Ortega
Introduction to Rails - presented by Arman Ortegaarman o
 
Small wins in a small time with Apache Solr
Small wins in a small time with Apache SolrSmall wins in a small time with Apache Solr
Small wins in a small time with Apache SolrSourcesense
 
TorqueBox - Ruby Hoedown 2011
TorqueBox - Ruby Hoedown 2011TorqueBox - Ruby Hoedown 2011
TorqueBox - Ruby Hoedown 2011Lance Ball
 
Ecossistema Ruby - versão SCTI UNF 2013
Ecossistema Ruby - versão SCTI UNF 2013Ecossistema Ruby - versão SCTI UNF 2013
Ecossistema Ruby - versão SCTI UNF 2013Fabio Akita
 
Rapid Prototyping with Solr
Rapid Prototyping with SolrRapid Prototyping with Solr
Rapid Prototyping with SolrErik Hatcher
 
TorqueBox: The beauty of Ruby with the power of JBoss. Presented at Devnexus...
TorqueBox: The beauty of Ruby with the power of JBoss.  Presented at Devnexus...TorqueBox: The beauty of Ruby with the power of JBoss.  Presented at Devnexus...
TorqueBox: The beauty of Ruby with the power of JBoss. Presented at Devnexus...bobmcwhirter
 
Rails 3 (beta) Roundup
Rails 3 (beta) RoundupRails 3 (beta) Roundup
Rails 3 (beta) RoundupWayne Carter
 
Connecting the Worlds of Java and Ruby with JRuby
Connecting the Worlds of Java and Ruby with JRubyConnecting the Worlds of Java and Ruby with JRuby
Connecting the Worlds of Java and Ruby with JRubyNick Sieger
 
Rapid Prototyping with Solr
Rapid Prototyping with SolrRapid Prototyping with Solr
Rapid Prototyping with SolrErik Hatcher
 
Solr Powered Lucene
Solr Powered LuceneSolr Powered Lucene
Solr Powered LuceneErik Hatcher
 
Rapid prototyping with solr - By Erik Hatcher
Rapid prototyping with solr -  By Erik Hatcher Rapid prototyping with solr -  By Erik Hatcher
Rapid prototyping with solr - By Erik Hatcher lucenerevolution
 
Building Enterprise Search Engines using Open Source Technologies
Building Enterprise Search Engines using Open Source TechnologiesBuilding Enterprise Search Engines using Open Source Technologies
Building Enterprise Search Engines using Open Source TechnologiesRahul Singh
 
Building Enterprise Search Engines using Open Source Technologies
Building Enterprise Search Engines using Open Source TechnologiesBuilding Enterprise Search Engines using Open Source Technologies
Building Enterprise Search Engines using Open Source TechnologiesAnant Corporation
 
Ruby on Rails All Hands Meeting
Ruby on Rails All Hands MeetingRuby on Rails All Hands Meeting
Ruby on Rails All Hands MeetingDan Davis
 
Pourquoi ruby et rails déchirent
Pourquoi ruby et rails déchirentPourquoi ruby et rails déchirent
Pourquoi ruby et rails déchirentNicolas Ledez
 
Real time Analytics with Apache Kafka and Apache Spark
Real time Analytics with Apache Kafka and Apache SparkReal time Analytics with Apache Kafka and Apache Spark
Real time Analytics with Apache Kafka and Apache SparkRahul Jain
 

Similaire à Rails and the Apache SOLR Search Engine (20)

Dev8d Apache Solr Tutorial
Dev8d Apache Solr TutorialDev8d Apache Solr Tutorial
Dev8d Apache Solr Tutorial
 
Introduction to Rails - presented by Arman Ortega
Introduction to Rails - presented by Arman OrtegaIntroduction to Rails - presented by Arman Ortega
Introduction to Rails - presented by Arman Ortega
 
Supa fast Ruby + Rails
Supa fast Ruby + RailsSupa fast Ruby + Rails
Supa fast Ruby + Rails
 
Small wins in a small time with Apache Solr
Small wins in a small time with Apache SolrSmall wins in a small time with Apache Solr
Small wins in a small time with Apache Solr
 
TorqueBox - Ruby Hoedown 2011
TorqueBox - Ruby Hoedown 2011TorqueBox - Ruby Hoedown 2011
TorqueBox - Ruby Hoedown 2011
 
Ecossistema Ruby - versão SCTI UNF 2013
Ecossistema Ruby - versão SCTI UNF 2013Ecossistema Ruby - versão SCTI UNF 2013
Ecossistema Ruby - versão SCTI UNF 2013
 
Rapid Prototyping with Solr
Rapid Prototyping with SolrRapid Prototyping with Solr
Rapid Prototyping with Solr
 
TorqueBox: The beauty of Ruby with the power of JBoss. Presented at Devnexus...
TorqueBox: The beauty of Ruby with the power of JBoss.  Presented at Devnexus...TorqueBox: The beauty of Ruby with the power of JBoss.  Presented at Devnexus...
TorqueBox: The beauty of Ruby with the power of JBoss. Presented at Devnexus...
 
Rails 3 (beta) Roundup
Rails 3 (beta) RoundupRails 3 (beta) Roundup
Rails 3 (beta) Roundup
 
Connecting the Worlds of Java and Ruby with JRuby
Connecting the Worlds of Java and Ruby with JRubyConnecting the Worlds of Java and Ruby with JRuby
Connecting the Worlds of Java and Ruby with JRuby
 
Rapid Prototyping with Solr
Rapid Prototyping with SolrRapid Prototyping with Solr
Rapid Prototyping with Solr
 
Solr Powered Lucene
Solr Powered LuceneSolr Powered Lucene
Solr Powered Lucene
 
Rapid Prototyping with Solr
Rapid Prototyping with SolrRapid Prototyping with Solr
Rapid Prototyping with Solr
 
Rapid prototyping with solr - By Erik Hatcher
Rapid prototyping with solr -  By Erik Hatcher Rapid prototyping with solr -  By Erik Hatcher
Rapid prototyping with solr - By Erik Hatcher
 
Building Enterprise Search Engines using Open Source Technologies
Building Enterprise Search Engines using Open Source TechnologiesBuilding Enterprise Search Engines using Open Source Technologies
Building Enterprise Search Engines using Open Source Technologies
 
Building Enterprise Search Engines using Open Source Technologies
Building Enterprise Search Engines using Open Source TechnologiesBuilding Enterprise Search Engines using Open Source Technologies
Building Enterprise Search Engines using Open Source Technologies
 
Wider than rails
Wider than railsWider than rails
Wider than rails
 
Ruby on Rails All Hands Meeting
Ruby on Rails All Hands MeetingRuby on Rails All Hands Meeting
Ruby on Rails All Hands Meeting
 
Pourquoi ruby et rails déchirent
Pourquoi ruby et rails déchirentPourquoi ruby et rails déchirent
Pourquoi ruby et rails déchirent
 
Real time Analytics with Apache Kafka and Apache Spark
Real time Analytics with Apache Kafka and Apache SparkReal time Analytics with Apache Kafka and Apache Spark
Real time Analytics with Apache Kafka and Apache Spark
 

Plus de David Keener

Writing Killer Fight Scenes
Writing Killer Fight ScenesWriting Killer Fight Scenes
Writing Killer Fight ScenesDavid Keener
 
Build a Space Battle
Build a Space BattleBuild a Space Battle
Build a Space BattleDavid Keener
 
Creating an Adaptive Setting
Creating an Adaptive SettingCreating an Adaptive Setting
Creating an Adaptive SettingDavid Keener
 
Public Speaking for Writers
Public Speaking for WritersPublic Speaking for Writers
Public Speaking for WritersDavid Keener
 
21st Century Writer
21st Century Writer21st Century Writer
21st Century WriterDavid Keener
 
Titanic: The Forgotten Passengers
Titanic: The Forgotten PassengersTitanic: The Forgotten Passengers
Titanic: The Forgotten PassengersDavid Keener
 
Rails Tips and Best Practices
Rails Tips and Best PracticesRails Tips and Best Practices
Rails Tips and Best PracticesDavid Keener
 
Elevator Up, Please!
Elevator Up, Please!Elevator Up, Please!
Elevator Up, Please!David Keener
 
Killer Business Models
Killer Business ModelsKiller Business Models
Killer Business ModelsDavid Keener
 
Building Facebook Apps
Building Facebook AppsBuilding Facebook Apps
Building Facebook AppsDavid Keener
 
Leveraging Rails to Build Facebook Apps
Leveraging Rails to Build Facebook AppsLeveraging Rails to Build Facebook Apps
Leveraging Rails to Build Facebook AppsDavid Keener
 
Quick Start: ActiveScaffold
Quick Start: ActiveScaffoldQuick Start: ActiveScaffold
Quick Start: ActiveScaffoldDavid Keener
 
Creating Custom Charts With Ruby Vector Graphics
Creating Custom Charts With Ruby Vector GraphicsCreating Custom Charts With Ruby Vector Graphics
Creating Custom Charts With Ruby Vector GraphicsDavid Keener
 
A Tour of Ruby On Rails
A Tour of Ruby On RailsA Tour of Ruby On Rails
A Tour of Ruby On RailsDavid Keener
 
Using Rails to Create an Enterprise App: A Real-Life Case Study
Using Rails to Create an Enterprise App: A Real-Life Case StudyUsing Rails to Create an Enterprise App: A Real-Life Case Study
Using Rails to Create an Enterprise App: A Real-Life Case StudyDavid Keener
 
Implementing OpenID for Your Social Networking Site
Implementing OpenID for Your Social Networking SiteImplementing OpenID for Your Social Networking Site
Implementing OpenID for Your Social Networking SiteDavid Keener
 
Creating Dynamic Charts With JFreeChart
Creating Dynamic Charts With JFreeChartCreating Dynamic Charts With JFreeChart
Creating Dynamic Charts With JFreeChartDavid Keener
 
Quick Start: Rails
Quick Start: RailsQuick Start: Rails
Quick Start: RailsDavid Keener
 

Plus de David Keener (20)

Writing Killer Fight Scenes
Writing Killer Fight ScenesWriting Killer Fight Scenes
Writing Killer Fight Scenes
 
Build a Space Battle
Build a Space BattleBuild a Space Battle
Build a Space Battle
 
Creating an Adaptive Setting
Creating an Adaptive SettingCreating an Adaptive Setting
Creating an Adaptive Setting
 
Public Speaking for Writers
Public Speaking for WritersPublic Speaking for Writers
Public Speaking for Writers
 
21st Century Writer
21st Century Writer21st Century Writer
21st Century Writer
 
Titanic: The Forgotten Passengers
Titanic: The Forgotten PassengersTitanic: The Forgotten Passengers
Titanic: The Forgotten Passengers
 
Rails Tips and Best Practices
Rails Tips and Best PracticesRails Tips and Best Practices
Rails Tips and Best Practices
 
Elevator Up, Please!
Elevator Up, Please!Elevator Up, Please!
Elevator Up, Please!
 
Killer Business Models
Killer Business ModelsKiller Business Models
Killer Business Models
 
Rails Security
Rails SecurityRails Security
Rails Security
 
Building Facebook Apps
Building Facebook AppsBuilding Facebook Apps
Building Facebook Apps
 
Leveraging Rails to Build Facebook Apps
Leveraging Rails to Build Facebook AppsLeveraging Rails to Build Facebook Apps
Leveraging Rails to Build Facebook Apps
 
Quick Start: ActiveScaffold
Quick Start: ActiveScaffoldQuick Start: ActiveScaffold
Quick Start: ActiveScaffold
 
Creating Custom Charts With Ruby Vector Graphics
Creating Custom Charts With Ruby Vector GraphicsCreating Custom Charts With Ruby Vector Graphics
Creating Custom Charts With Ruby Vector Graphics
 
A Tour of Ruby On Rails
A Tour of Ruby On RailsA Tour of Ruby On Rails
A Tour of Ruby On Rails
 
Using Rails to Create an Enterprise App: A Real-Life Case Study
Using Rails to Create an Enterprise App: A Real-Life Case StudyUsing Rails to Create an Enterprise App: A Real-Life Case Study
Using Rails to Create an Enterprise App: A Real-Life Case Study
 
Practical JRuby
Practical JRubyPractical JRuby
Practical JRuby
 
Implementing OpenID for Your Social Networking Site
Implementing OpenID for Your Social Networking SiteImplementing OpenID for Your Social Networking Site
Implementing OpenID for Your Social Networking Site
 
Creating Dynamic Charts With JFreeChart
Creating Dynamic Charts With JFreeChartCreating Dynamic Charts With JFreeChart
Creating Dynamic Charts With JFreeChart
 
Quick Start: Rails
Quick Start: RailsQuick Start: Rails
Quick Start: Rails
 

Dernier

Nanopower In Semiconductor Industry.pdf
Nanopower  In Semiconductor Industry.pdfNanopower  In Semiconductor Industry.pdf
Nanopower In Semiconductor Industry.pdfPedro Manuel
 
9 Steps For Building Winning Founding Team
9 Steps For Building Winning Founding Team9 Steps For Building Winning Founding Team
9 Steps For Building Winning Founding TeamAdam Moalla
 
Salesforce Miami User Group Event - 1st Quarter 2024
Salesforce Miami User Group Event - 1st Quarter 2024Salesforce Miami User Group Event - 1st Quarter 2024
Salesforce Miami User Group Event - 1st Quarter 2024SkyPlanner
 
Designing A Time bound resource download URL
Designing A Time bound resource download URLDesigning A Time bound resource download URL
Designing A Time bound resource download URLRuncy Oommen
 
Artificial Intelligence & SEO Trends for 2024
Artificial Intelligence & SEO Trends for 2024Artificial Intelligence & SEO Trends for 2024
Artificial Intelligence & SEO Trends for 2024D Cloud Solutions
 
Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...
Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...
Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...DianaGray10
 
How Accurate are Carbon Emissions Projections?
How Accurate are Carbon Emissions Projections?How Accurate are Carbon Emissions Projections?
How Accurate are Carbon Emissions Projections?IES VE
 
UiPath Studio Web workshop series - Day 6
UiPath Studio Web workshop series - Day 6UiPath Studio Web workshop series - Day 6
UiPath Studio Web workshop series - Day 6DianaGray10
 
COMPUTER 10: Lesson 7 - File Storage and Online Collaboration
COMPUTER 10: Lesson 7 - File Storage and Online CollaborationCOMPUTER 10: Lesson 7 - File Storage and Online Collaboration
COMPUTER 10: Lesson 7 - File Storage and Online Collaborationbruanjhuli
 
Comparing Sidecar-less Service Mesh from Cilium and Istio
Comparing Sidecar-less Service Mesh from Cilium and IstioComparing Sidecar-less Service Mesh from Cilium and Istio
Comparing Sidecar-less Service Mesh from Cilium and IstioChristian Posta
 
UiPath Solutions Management Preview - Northern CA Chapter - March 22.pdf
UiPath Solutions Management Preview - Northern CA Chapter - March 22.pdfUiPath Solutions Management Preview - Northern CA Chapter - March 22.pdf
UiPath Solutions Management Preview - Northern CA Chapter - March 22.pdfDianaGray10
 
Computer 10: Lesson 10 - Online Crimes and Hazards
Computer 10: Lesson 10 - Online Crimes and HazardsComputer 10: Lesson 10 - Online Crimes and Hazards
Computer 10: Lesson 10 - Online Crimes and HazardsSeth Reyes
 
20230202 - Introduction to tis-py
20230202 - Introduction to tis-py20230202 - Introduction to tis-py
20230202 - Introduction to tis-pyJamie (Taka) Wang
 
NIST Cybersecurity Framework (CSF) 2.0 Workshop
NIST Cybersecurity Framework (CSF) 2.0 WorkshopNIST Cybersecurity Framework (CSF) 2.0 Workshop
NIST Cybersecurity Framework (CSF) 2.0 WorkshopBachir Benyammi
 
Secure your environment with UiPath and CyberArk technologies - Session 1
Secure your environment with UiPath and CyberArk technologies - Session 1Secure your environment with UiPath and CyberArk technologies - Session 1
Secure your environment with UiPath and CyberArk technologies - Session 1DianaGray10
 
The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...
The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...
The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...Aggregage
 
Building Your Own AI Instance (TBLC AI )
Building Your Own AI Instance (TBLC AI )Building Your Own AI Instance (TBLC AI )
Building Your Own AI Instance (TBLC AI )Brian Pichman
 
AI You Can Trust - Ensuring Success with Data Integrity Webinar
AI You Can Trust - Ensuring Success with Data Integrity WebinarAI You Can Trust - Ensuring Success with Data Integrity Webinar
AI You Can Trust - Ensuring Success with Data Integrity WebinarPrecisely
 
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdf
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdfIaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdf
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdfDaniel Santiago Silva Capera
 

Dernier (20)

Nanopower In Semiconductor Industry.pdf
Nanopower  In Semiconductor Industry.pdfNanopower  In Semiconductor Industry.pdf
Nanopower In Semiconductor Industry.pdf
 
9 Steps For Building Winning Founding Team
9 Steps For Building Winning Founding Team9 Steps For Building Winning Founding Team
9 Steps For Building Winning Founding Team
 
Salesforce Miami User Group Event - 1st Quarter 2024
Salesforce Miami User Group Event - 1st Quarter 2024Salesforce Miami User Group Event - 1st Quarter 2024
Salesforce Miami User Group Event - 1st Quarter 2024
 
Designing A Time bound resource download URL
Designing A Time bound resource download URLDesigning A Time bound resource download URL
Designing A Time bound resource download URL
 
Artificial Intelligence & SEO Trends for 2024
Artificial Intelligence & SEO Trends for 2024Artificial Intelligence & SEO Trends for 2024
Artificial Intelligence & SEO Trends for 2024
 
Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...
Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...
Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...
 
How Accurate are Carbon Emissions Projections?
How Accurate are Carbon Emissions Projections?How Accurate are Carbon Emissions Projections?
How Accurate are Carbon Emissions Projections?
 
UiPath Studio Web workshop series - Day 6
UiPath Studio Web workshop series - Day 6UiPath Studio Web workshop series - Day 6
UiPath Studio Web workshop series - Day 6
 
COMPUTER 10: Lesson 7 - File Storage and Online Collaboration
COMPUTER 10: Lesson 7 - File Storage and Online CollaborationCOMPUTER 10: Lesson 7 - File Storage and Online Collaboration
COMPUTER 10: Lesson 7 - File Storage and Online Collaboration
 
Comparing Sidecar-less Service Mesh from Cilium and Istio
Comparing Sidecar-less Service Mesh from Cilium and IstioComparing Sidecar-less Service Mesh from Cilium and Istio
Comparing Sidecar-less Service Mesh from Cilium and Istio
 
UiPath Solutions Management Preview - Northern CA Chapter - March 22.pdf
UiPath Solutions Management Preview - Northern CA Chapter - March 22.pdfUiPath Solutions Management Preview - Northern CA Chapter - March 22.pdf
UiPath Solutions Management Preview - Northern CA Chapter - March 22.pdf
 
Computer 10: Lesson 10 - Online Crimes and Hazards
Computer 10: Lesson 10 - Online Crimes and HazardsComputer 10: Lesson 10 - Online Crimes and Hazards
Computer 10: Lesson 10 - Online Crimes and Hazards
 
20230202 - Introduction to tis-py
20230202 - Introduction to tis-py20230202 - Introduction to tis-py
20230202 - Introduction to tis-py
 
NIST Cybersecurity Framework (CSF) 2.0 Workshop
NIST Cybersecurity Framework (CSF) 2.0 WorkshopNIST Cybersecurity Framework (CSF) 2.0 Workshop
NIST Cybersecurity Framework (CSF) 2.0 Workshop
 
Secure your environment with UiPath and CyberArk technologies - Session 1
Secure your environment with UiPath and CyberArk technologies - Session 1Secure your environment with UiPath and CyberArk technologies - Session 1
Secure your environment with UiPath and CyberArk technologies - Session 1
 
The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...
The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...
The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...
 
20150722 - AGV
20150722 - AGV20150722 - AGV
20150722 - AGV
 
Building Your Own AI Instance (TBLC AI )
Building Your Own AI Instance (TBLC AI )Building Your Own AI Instance (TBLC AI )
Building Your Own AI Instance (TBLC AI )
 
AI You Can Trust - Ensuring Success with Data Integrity Webinar
AI You Can Trust - Ensuring Success with Data Integrity WebinarAI You Can Trust - Ensuring Success with Data Integrity Webinar
AI You Can Trust - Ensuring Success with Data Integrity Webinar
 
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdf
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdfIaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdf
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdf
 

Rails and the Apache SOLR Search Engine