SlideShare a Scribd company logo
1 of 283
Download to read offline
Solving the
Riddle of Search
 Using Sphinx with Rails
My name is Pat
http://freelancing-gods.com

   http://twitter.com/pat
Questions?
Within Current
   Context?
Ask as we go
Jumping topics?
Please Wait
A Tute in
Two Parts
Part One:
Core Concepts
(ie: the
boring bits)
Part Two:
Beyond the
  Basics
(ie: the
fun bits)
So...
Part One:
Core Concepts
What is Sphinx?
Open Source
Search Service
http://www.sphinxsearch.com/
Similar to Ferret,
Solr, Xapian, etc
Talks to MySQL
and PostgreSQL
... and Microsoft
 SQL Server and
 Oracle in 0.9.9
Two Key Tools
indexer
Guess what
  it does
Talks to your
 database
Files away
your data
searchd
No prizes for
guessing this
   either.
searchd = search
    daemon
Runs in the
Background
Handles Search
  Requests
Does not talk to
your database.
What gets
indexed?
Documents
No, not Microsoft
   Word docs
A document is a
single database
    record
(ie: a Rails
model instance)
Documents have
   fields and
   attributes
They are not
 the same.
THEY ARE NOT
 THE SAME.
Fields are...
Textual Data
Strings
Words to
search for.
Attributes, on
the other hand...
Integers
Floats
Timestamps
Booleans
... and Strings.
     Kinda.
Strings as
 Ordinals
Huh?
Integer values
   indicating
  alphabetical
order of strings.
Useless for
Searching?
Useful for
Sorting though.
Search queries
  don’t look at
attribute values.
Sorting
Grouping
Filtering
Exact value
 matching
So, that’s
Sphinx...
But what’s
 Thinking
  Sphinx?
Ruby Library/
Rails Plugin
Hooks into
ActiveRecord
Configure
 Sphinx with
Ruby and YAML
Search with
Sphinx in Rails
What’s in it for
 me though?
Why should I
use Sphinx?
SQL does it all,
    right?
Well, maybe
But it gets messy
• Find all people
• Where any word matches
• Part of any of four fields
# given a query of ‘Pat Allan’
# assuming MySQL

SELECT * FROM people
WHERE first_name LIKE   '%Pat%'
  OR first_name LIKE    '%Allan%'
  OR last_name LIKE     '%Pat%'
  OR last_name LIKE     '%Allan%'
  OR location    LIKE   '%Pat%'
  OR location    LIKE   '%Allan%'
  OR profile     LIKE   '%Pat%'
  OR profile     LIKE   '%Allan%';
It’s a bit long...
And that’s a
simple query!
If we use
Thinking Sphinx
# given a query of ‘Pat Allan’

Person.search quot;Pat Allanquot;,
  :match_mode => :any
Much cleaner
Can we start
coding now?
Not quite.
Indexing
Fields
What textual
data do we want
   indexed?
Enter the
 indexes
 method
class Person < ActiveRecord::Base
  # ...

 define_index do
   indexes first_name, last_name,
     location, profile
 end

  # ...
end
# Combine columns into one field
indexes [first_name, last_name],
  :as => :name

# Avoid core Ruby class methods
indexes :name

# Use association columns
indexes photos.captions,
  :as => :photos
Attributes
What do we want
to sort and filter
       by?
Our friend the
      has
  method
class Person < ActiveRecord::Base
  # ...

 define_index do
   # ...
   has created_at, admin, email, :id
 end

  # ...
end
# Multi-Value Attributes (MVAs)
has tags.id, :as => :tag_ids
What if I want to
sort by a field?
indexes first_name, last_name,
  :sortable => true
What does all
this code do?
Defines a SQL
query for Sphinx
Complexity
leads to slower
   indexing
So don’t forget
to add database
indexes as well!
Warning for fans
 of fixtures...
# In your define_index block:
set_property(
  :sql_range_step => 10_000_000
)
Because it’s
   SQL...
Can only use
 model columns,
not model methods
Maybe that’s not
 good enough?
Write your
own SQL!
has quot;YEAR(created_at)quot;,
  :as => :year, :type => :integer
So, we’ve set up
  our index.
  Now what?
rake thinking_sphinx:index
(in /Users/pat/Code/ruby/ts_test_2.2.0)
Generating Configuration to /Users/pat/Code/ruby/ts_test_2.2.0/
config/development.sphinx.conf
indexer --config /Users/pat/Code/ruby/ts_test_2.2.0/config/
development.sphinx.conf --all
Sphinx 0.9.8-release (r1371)
Copyright (c) 2001-2008, Andrew Aksyonoff

using config file '/Users/pat/Code/ruby/ts_test_2.2.0/config/
development.sphinx.conf'...
indexing index 'person_core'...
collected 1000 docs, 0.0 MB
collected 0 attr values
sorted 0.0 Mvalues, 100.0% done
sorted 0.0 Mhits, 100.0% done
total 1000 docs, 14436 bytes
total 0.191 sec, 75523.42 bytes/sec, 5231.60 docs/sec
indexing index 'person_delta'...
collected 0 docs, 0.0 MB
collected 0 attr values
sorted 0.0 Mvalues, nan% done
total 0 docs, 0 bytes
total 0.010 sec, 0.00 bytes/sec, 0.00 docs/sec
distributed index 'person' can not be directly indexed; skipping.
rake thinking_sphinx:start
(in /Users/pat/Code/ruby/ts_test_2.2.0)
searchd --pidfile --config /Users/pat/Code/ruby/ts_test_2.2.0/
config/development.sphinx.conf
Sphinx 0.9.8-release (r1371)
Copyright (c) 2001-2008, Andrew Aksyonoff

using config file '/Users/pat/Code/ruby/ts_test_2.2.0/config/
development.sphinx.conf'...
Started successfully (pid 6220).
rake thinking_sphinx:stop
(in /Users/pat/Code/ruby/ts_test_2.2.0)
Sphinx 0.9.8-release (r1371)
Copyright (c) 2001-2008, Andrew Aksyonoff

using config file '/Users/pat/Code/ruby/ts_test_2.2.0/config/
development.sphinx.conf'...
stop: succesfully sent SIGTERM to pid 6220
Stopped search daemon (pid 6220).
rake ts:in
rake ts:start
rake ts:stop
Can we
search yet?
Person.search
Person.search quot;Pat Allanquot;
Focus that
 search on a
specific field
Person.search(quot;Rubyquot;,
  :conditions => {:name => quot;Pat Allanquot;}
)
Conditions are
not exactly like
 ActiveRecord
Strings only.
And conditions
should always
  be a Hash.
Filtering on
 Attributes
Person.search(quot;Rubyquot;,
  :with => {:admin => true}
)
Filtering
by Ranges
Person.search(quot;Rubyquot;,
  :with => {
    :created_at => 1.week.ago..Time.now
  }
)
Filtering
by Arrays
Person.search(quot;Rubyquot;,
  :with => {:tag_ids => [1, 2, 3]}
)
Matching all
Array values
Person.search(quot;Rubyquot;,
  :with_all => {:tag_ids => [1, 2, 3]}
)
Excluding
Filter Values
Person.search(quot;Rubyquot;,
  :without => {:admin => true}
)
Match Modes
:all
(The Default)
All words must
    exist in a
  document
:any
Person.search(quot;Pat Allanquot;,
  :match_mode => :any
)
One of the words
 must exist in a
  document
:phrase
The exact query
must exist in the
  document
:boolean
Use boolean
logic in search
    queries
:extended
Can match on
specific fields,
  and apply
boolean logic
Weighting
Person.search(quot;Pat Allanquot;,
  :field_weights => {
    quot;namequot;     => 100,
    quot;profilequot; => 50,
    quot;locationquot; => 30
  }
)
define_index do
  # ...

  set_property    :field_weights => {
    quot;namequot;        => 100,
    quot;profilequot;     => 50,
    quot;locationquot;    => 30
  }
end
Sorting
:relevance
The Default
By Attributes
Or Fields flagged
   as :sortable
:attr_asc
Person.search quot;Pat Allanquot;,
  :order => :created_at
:attr_desc
Person.search quot;Pat Allanquot;,
  :order     => :created_at,
  :sort_mode => :desc
:extended
Person.search quot;Pat Allanquot;,
  :order => quot;last_name ASC,
first_name ASCquot;
:expr
Person.search quot;Pat Allanquot;,
  :sort_mode => :expr,
  :sort_by   => quot;@weight * rankingquot;
:time_segments
Person.search quot;Pat Allanquot;,
  :sort_mode => :time_segments,
  :sort_by   => quot;created_atquot;
• Last Hour
• Last Day
• Last Week
• Last Month
• Last 3 Months
• Everything Else
Sorted by
Segment, then
  Relevance
Multi-Model
 Searches
ThinkingSphinx::Search.search(
  quot;Pat Allanquot;
)
Pagination
Always On
Person.search quot;Pat Allanquot;,
  :page     => params[:page]
You can request
really big pages
    though.
Person.search quot;Pat Allanquot;,
  :per_page => 1000,
  :page     => params[:page]
If you want
massive pages...
Person.search quot;Pat Allanquot;,
  :page        => params[:page],
  :per_page    => 1_000_000,
  :max_matches => 1_000_000
# config/sphinx.yml
development:
  max_matches: 1000000
test:
  max_matches: 1000000
production:
  max_matches: 1000000
Don’t forget to
restart Sphinx
Installing
Thinking Sphinx
Using Git?
script/plugin install
  git://github.com/freelancing-god/
  thinking-sphinx.git
git clone git://github.com/
  freelancing-god/thinking-sphinx.git
Want the gem
  instead?
sudo gem install
  freelancing-god-thinking-sphinx
  --source http://gems.github.com
# inside config/environment.rb
config.gem(
  quot;freelancing-god-thinking-sphinxquot;,
  :version => quot;1.1.6quot;,
  :lib     => quot;thinking_sphinxquot;
)
# at the end of your Rakefile:
require 'thinking_sphinx/tasks'
Installing
  Sphinx
Windows?
Installer.
Piece of Cake.
*nix?
apt, yum, etc.
 Should be
  painless.
OS X?
Well... it can
 be a little
complicated
./configure
make
sudo make install
With
PostgreSQL?
./configure --with-pgsql=/usr/local/
  include/postgresql
make
sudo make install
pg_config --pkgincludedir
Or Use MacPorts
... if you’re using
  it for MySQL or
     PostgreSQL
        as well
Anyone still
  stuck?
Examples in the
  Sample App
git://github.com/freelancing-
    god/sphinx-tute.git
Set up Database
Hack as we go
Questions?
Afternoon
 Break?
Part Two:
Beyond the
  Basics
Delta Indexes
Why?
No single-
document
 updates
Can only process
  a full index.
Delta Index
 holds the
 changes
∆
∆
rake thinking_sphinx:index
∆
What does this
   mean?
We can track
 changes as
they happen
... at the cost of a
     little extra
     overhead.
How?
1. Add a boolean
column ‘delta’ to
   your model.
2. Tell your index
 to use a delta.
define_index do
  # ...

  set_property :delta => true
end
3. Stop,
Re-index,
 Restart.
rake thinking_sphinx:stop
rake thinking_sphinx:index
rake thinking_sphinx:start
... that’s the
    default
 approach
Datetime Deltas
define_index do
  # ...

  set_property :delta => :datetime,
    :threshold => 1.day
end
Use existing
 updated_at
  column
rake thinking_sphinx:index:delta
Please Note: Not
entirely reliable
Delayed Deltas
create_table :delayed_jobs do |t|
  # ...
end
define_index do
  # ...

  set_property :delta => :delayed
end
rake thinking_sphinx:delayed_delta
Uses delayed_job
Removes
overheard from
your web stack
Give it a Shot
Facets
Search
Summaries
define_index do
  # ...
  indexes location, country,
    :facet => true

  has admin, :facet => true
end
Person.facets(quot;Rubyquot;)
{
    :country => {
       quot;Australiaquot; =>   15,
       quot;USAquot;       =>   11,
       quot;Germanyquot;   =>   8,
       quot;Canadaquot;    =>   12
    },
    :location => {
       quot;Melbournequot; =>   3,
    # ...
}
@facets.for(:country => quot;Australiaquot;)
Give it a Shot
Extended
Configuration
config/sphinx.yml
Just like
database.yml
Global Sphinx
   settings
Common
   Example:
Partial Matching
Rai* == Rails
development:
  enable_star: 1
  min_infix_len: 1
test:
  enable_star: 1
  min_infix_len: 1
production:
  enable_star: 1
  min_infix_len: 1
Stop,
Re-index,
 Restart.
Deployment
Using
Capistrano?
# config/deploy.rb
load 'vendor/plugins/thinking-sphinx/lib/
thinking_sphinx/deploy/capistrano'
cap   thinking_sphinx:configure
cap   thinking_sphinx:index
cap   thinking_sphinx:install:sphinx
cap   thinking_sphinx:install:ts
cap   thinking_sphinx:rebuild
cap   thinking_sphinx:restart
cap   thinking_sphinx:shared_sphinx_folder
cap   thinking_sphinx:start
cap   thinking_sphinx:stop
Installing
  Sphinx
Set Sphinx index
     location
Sphinx does not
 like symlinks
# config/sphinx.yml
production:
  searchd_file_path: quot;/var/www/
sphinx-tute/shared/db/sphinx/
production/quot;
# config/deploy.rb
after quot;deploy:setupquot;,
  quot;thinking_sphinx:shared_sphinx_folderquot;
Regular
indexing via
   Cron
Geo-Searching
Need latitude
and longitude
  attributes
As floats
In Radians
define_index do
  # ...

  has latitude, longitude
end
Stop,
Re-index,
 Restart.
Bar.search(
  quot;Las Vegasquot;,
  :geo => [@lat, @lng],
  :sort => quot;@geodist ASCquot;
)
@bars.each_with_geodist do |bar,
distance|
  # distance is in metres
end
Using custom
column names?
define_index do
  # ...

  set_property(
    :latitude_attr => :updown,
    :longitude_attr => :leftright
  )
end
Geo-searching
across multiple
   models?
ThinkingSphinx::Search.search(
  quot;pancakesquot;,
  :geo            => [@lat, @lng]
  :latitude_attr => :lat,
  :longitude_attr => :lng
)
Give it a Shot
Are we done yet?
http://ts.freelancing-gods.com
http://groups.google.com/
 group/thinking-sphinx
http://peepcode.com/products/
    thinking-sphinx-pdf
Questions?
Thank you.

More Related Content

What's hot

Needle in an enterprise haystack
Needle in an enterprise haystackNeedle in an enterprise haystack
Needle in an enterprise haystackAndrew Mleczko
 
Php Code Audits (PHP UK 2010)
Php Code Audits (PHP UK 2010)Php Code Audits (PHP UK 2010)
Php Code Audits (PHP UK 2010)Damien Seguy
 
Schemaless Solr and the Solr Schema REST API
Schemaless Solr and the Solr Schema REST APISchemaless Solr and the Solr Schema REST API
Schemaless Solr and the Solr Schema REST APIlucenerevolution
 
Mysqlnd Async Ipc2008
Mysqlnd Async Ipc2008Mysqlnd Async Ipc2008
Mysqlnd Async Ipc2008Ulf Wendel
 
The amazing world behind your ORM
The amazing world behind your ORMThe amazing world behind your ORM
The amazing world behind your ORMLouise Grandjonc
 
Rocky Nevin's presentation at eComm 2008
Rocky Nevin's presentation at eComm 2008Rocky Nevin's presentation at eComm 2008
Rocky Nevin's presentation at eComm 2008eComm2008
 
Django REST Framework
Django REST FrameworkDjango REST Framework
Django REST FrameworkLoad Impact
 
ARCでめちゃモテiOSプログラマー
ARCでめちゃモテiOSプログラマーARCでめちゃモテiOSプログラマー
ARCでめちゃモテiOSプログラマーSatoshi Asano
 
Solr's Search Relevancy (Understand Solr's query debug)
Solr's Search Relevancy (Understand Solr's query debug)Solr's Search Relevancy (Understand Solr's query debug)
Solr's Search Relevancy (Understand Solr's query debug)Wongnai
 
Fulltext search hell, como estruturar um sistema de busca desacoplado
Fulltext search hell, como estruturar um sistema de busca desacopladoFulltext search hell, como estruturar um sistema de busca desacoplado
Fulltext search hell, como estruturar um sistema de busca desacopladoJuliana Lucena
 
Searching ORM: First Why, Then How
Searching ORM: First Why, Then HowSearching ORM: First Why, Then How
Searching ORM: First Why, Then Howsfarmer10
 
Dev in Santos - Como NÃO fazer pesquisas usando LIKE
Dev in Santos - Como NÃO fazer pesquisas usando LIKEDev in Santos - Como NÃO fazer pesquisas usando LIKE
Dev in Santos - Como NÃO fazer pesquisas usando LIKEFabio Akita
 
Hack in the Box Keynote 2006
Hack in the Box Keynote 2006Hack in the Box Keynote 2006
Hack in the Box Keynote 2006Mark Curphey
 
Tips of CakePHP and MongoDB - Cakefest2011 ichikaway
Tips of CakePHP and MongoDB - Cakefest2011 ichikaway Tips of CakePHP and MongoDB - Cakefest2011 ichikaway
Tips of CakePHP and MongoDB - Cakefest2011 ichikaway ichikaway
 
Cleanliness is Next to Domain-Specificity
Cleanliness is Next to Domain-SpecificityCleanliness is Next to Domain-Specificity
Cleanliness is Next to Domain-SpecificityBen Scofield
 
Solr vs. Elasticsearch, Case by Case: Presented by Alexandre Rafalovitch, UN
Solr vs. Elasticsearch,  Case by Case: Presented by Alexandre Rafalovitch, UNSolr vs. Elasticsearch,  Case by Case: Presented by Alexandre Rafalovitch, UN
Solr vs. Elasticsearch, Case by Case: Presented by Alexandre Rafalovitch, UNLucidworks
 

What's hot (19)

Needle in an enterprise haystack
Needle in an enterprise haystackNeedle in an enterprise haystack
Needle in an enterprise haystack
 
Php Code Audits (PHP UK 2010)
Php Code Audits (PHP UK 2010)Php Code Audits (PHP UK 2010)
Php Code Audits (PHP UK 2010)
 
Schemaless Solr and the Solr Schema REST API
Schemaless Solr and the Solr Schema REST APISchemaless Solr and the Solr Schema REST API
Schemaless Solr and the Solr Schema REST API
 
Mysqlnd Async Ipc2008
Mysqlnd Async Ipc2008Mysqlnd Async Ipc2008
Mysqlnd Async Ipc2008
 
The amazing world behind your ORM
The amazing world behind your ORMThe amazing world behind your ORM
The amazing world behind your ORM
 
Rocky Nevin's presentation at eComm 2008
Rocky Nevin's presentation at eComm 2008Rocky Nevin's presentation at eComm 2008
Rocky Nevin's presentation at eComm 2008
 
Django REST Framework
Django REST FrameworkDjango REST Framework
Django REST Framework
 
ARCでめちゃモテiOSプログラマー
ARCでめちゃモテiOSプログラマーARCでめちゃモテiOSプログラマー
ARCでめちゃモテiOSプログラマー
 
Solr Masterclass Bangkok, June 2014
Solr Masterclass Bangkok, June 2014Solr Masterclass Bangkok, June 2014
Solr Masterclass Bangkok, June 2014
 
Solr's Search Relevancy (Understand Solr's query debug)
Solr's Search Relevancy (Understand Solr's query debug)Solr's Search Relevancy (Understand Solr's query debug)
Solr's Search Relevancy (Understand Solr's query debug)
 
Fulltext search hell, como estruturar um sistema de busca desacoplado
Fulltext search hell, como estruturar um sistema de busca desacopladoFulltext search hell, como estruturar um sistema de busca desacoplado
Fulltext search hell, como estruturar um sistema de busca desacoplado
 
Searching ORM: First Why, Then How
Searching ORM: First Why, Then HowSearching ORM: First Why, Then How
Searching ORM: First Why, Then How
 
Dev in Santos - Como NÃO fazer pesquisas usando LIKE
Dev in Santos - Como NÃO fazer pesquisas usando LIKEDev in Santos - Como NÃO fazer pesquisas usando LIKE
Dev in Santos - Como NÃO fazer pesquisas usando LIKE
 
Hack in the Box Keynote 2006
Hack in the Box Keynote 2006Hack in the Box Keynote 2006
Hack in the Box Keynote 2006
 
Tips of CakePHP and MongoDB - Cakefest2011 ichikaway
Tips of CakePHP and MongoDB - Cakefest2011 ichikaway Tips of CakePHP and MongoDB - Cakefest2011 ichikaway
Tips of CakePHP and MongoDB - Cakefest2011 ichikaway
 
Elegant APIs
Elegant APIsElegant APIs
Elegant APIs
 
Cleanliness is Next to Domain-Specificity
Cleanliness is Next to Domain-SpecificityCleanliness is Next to Domain-Specificity
Cleanliness is Next to Domain-Specificity
 
Solr vs. Elasticsearch, Case by Case: Presented by Alexandre Rafalovitch, UN
Solr vs. Elasticsearch,  Case by Case: Presented by Alexandre Rafalovitch, UNSolr vs. Elasticsearch,  Case by Case: Presented by Alexandre Rafalovitch, UN
Solr vs. Elasticsearch, Case by Case: Presented by Alexandre Rafalovitch, UN
 
Conf orm - explain
Conf orm - explainConf orm - explain
Conf orm - explain
 

Similar to Solving the Riddle of Search: Using Sphinx with Rails

Cool bonsai cool - an introduction to ElasticSearch
Cool bonsai cool - an introduction to ElasticSearchCool bonsai cool - an introduction to ElasticSearch
Cool bonsai cool - an introduction to ElasticSearchclintongormley
 
Compass Framework
Compass FrameworkCompass Framework
Compass FrameworkLukas Vlcek
 
Using Thinking Sphinx with rails
Using Thinking Sphinx with railsUsing Thinking Sphinx with rails
Using Thinking Sphinx with railsRishav Dixit
 
quick intro to elastic search
quick intro to elastic search quick intro to elastic search
quick intro to elastic search medcl
 
CoffeeScript Design Patterns
CoffeeScript Design PatternsCoffeeScript Design Patterns
CoffeeScript Design PatternsTrevorBurnham
 
Rapid and Scalable Development with MongoDB, PyMongo, and Ming
Rapid and Scalable Development with MongoDB, PyMongo, and MingRapid and Scalable Development with MongoDB, PyMongo, and Ming
Rapid and Scalable Development with MongoDB, PyMongo, and MingRick Copeland
 
Spark with Elasticsearch
Spark with ElasticsearchSpark with Elasticsearch
Spark with ElasticsearchHolden Karau
 
Terrastore - A document database for developers
Terrastore - A document database for developersTerrastore - A document database for developers
Terrastore - A document database for developersSergio Bossa
 
All I Need to Know I Learned by Writing My Own Web Framework
All I Need to Know I Learned by Writing My Own Web FrameworkAll I Need to Know I Learned by Writing My Own Web Framework
All I Need to Know I Learned by Writing My Own Web FrameworkBen Scofield
 
Fazendo mágica com ElasticSearch
Fazendo mágica com ElasticSearchFazendo mágica com ElasticSearch
Fazendo mágica com ElasticSearchPedro Franceschi
 
Elasticsearch sur Azure : Make sense of your (BIG) data !
Elasticsearch sur Azure : Make sense of your (BIG) data !Elasticsearch sur Azure : Make sense of your (BIG) data !
Elasticsearch sur Azure : Make sense of your (BIG) data !Microsoft
 
Intro to Rails ActiveRecord
Intro to Rails ActiveRecordIntro to Rails ActiveRecord
Intro to Rails ActiveRecordMark Menard
 
How ElasticSearch lives in my DevOps life
How ElasticSearch lives in my DevOps lifeHow ElasticSearch lives in my DevOps life
How ElasticSearch lives in my DevOps life琛琳 饶
 
Introduction to source{d} Engine and source{d} Lookout
Introduction to source{d} Engine and source{d} Lookout Introduction to source{d} Engine and source{d} Lookout
Introduction to source{d} Engine and source{d} Lookout source{d}
 
Rotzy - Building an iPhone Photo Sharing App on Google App Engine
Rotzy - Building an iPhone Photo Sharing App on Google App EngineRotzy - Building an iPhone Photo Sharing App on Google App Engine
Rotzy - Building an iPhone Photo Sharing App on Google App Enginegeehwan
 
4Developers 2018: Pyt(h)on vs słoń: aktualny stan przetwarzania dużych danych...
4Developers 2018: Pyt(h)on vs słoń: aktualny stan przetwarzania dużych danych...4Developers 2018: Pyt(h)on vs słoń: aktualny stan przetwarzania dużych danych...
4Developers 2018: Pyt(h)on vs słoń: aktualny stan przetwarzania dużych danych...PROIDEA
 

Similar to Solving the Riddle of Search: Using Sphinx with Rails (20)

Cool bonsai cool - an introduction to ElasticSearch
Cool bonsai cool - an introduction to ElasticSearchCool bonsai cool - an introduction to ElasticSearch
Cool bonsai cool - an introduction to ElasticSearch
 
Compass Framework
Compass FrameworkCompass Framework
Compass Framework
 
Using Thinking Sphinx with rails
Using Thinking Sphinx with railsUsing Thinking Sphinx with rails
Using Thinking Sphinx with rails
 
quick intro to elastic search
quick intro to elastic search quick intro to elastic search
quick intro to elastic search
 
Easy R
Easy REasy R
Easy R
 
CoffeeScript Design Patterns
CoffeeScript Design PatternsCoffeeScript Design Patterns
CoffeeScript Design Patterns
 
Rapid and Scalable Development with MongoDB, PyMongo, and Ming
Rapid and Scalable Development with MongoDB, PyMongo, and MingRapid and Scalable Development with MongoDB, PyMongo, and Ming
Rapid and Scalable Development with MongoDB, PyMongo, and Ming
 
Spark with Elasticsearch
Spark with ElasticsearchSpark with Elasticsearch
Spark with Elasticsearch
 
JSON and the APInauts
JSON and the APInautsJSON and the APInauts
JSON and the APInauts
 
Terrastore - A document database for developers
Terrastore - A document database for developersTerrastore - A document database for developers
Terrastore - A document database for developers
 
All I Need to Know I Learned by Writing My Own Web Framework
All I Need to Know I Learned by Writing My Own Web FrameworkAll I Need to Know I Learned by Writing My Own Web Framework
All I Need to Know I Learned by Writing My Own Web Framework
 
Fazendo mágica com ElasticSearch
Fazendo mágica com ElasticSearchFazendo mágica com ElasticSearch
Fazendo mágica com ElasticSearch
 
Elasticsearch sur Azure : Make sense of your (BIG) data !
Elasticsearch sur Azure : Make sense of your (BIG) data !Elasticsearch sur Azure : Make sense of your (BIG) data !
Elasticsearch sur Azure : Make sense of your (BIG) data !
 
Spark Meetup
Spark MeetupSpark Meetup
Spark Meetup
 
Intro to Rails ActiveRecord
Intro to Rails ActiveRecordIntro to Rails ActiveRecord
Intro to Rails ActiveRecord
 
How ElasticSearch lives in my DevOps life
How ElasticSearch lives in my DevOps lifeHow ElasticSearch lives in my DevOps life
How ElasticSearch lives in my DevOps life
 
Introduction to source{d} Engine and source{d} Lookout
Introduction to source{d} Engine and source{d} Lookout Introduction to source{d} Engine and source{d} Lookout
Introduction to source{d} Engine and source{d} Lookout
 
Rotzy - Building an iPhone Photo Sharing App on Google App Engine
Rotzy - Building an iPhone Photo Sharing App on Google App EngineRotzy - Building an iPhone Photo Sharing App on Google App Engine
Rotzy - Building an iPhone Photo Sharing App on Google App Engine
 
4Developers 2018: Pyt(h)on vs słoń: aktualny stan przetwarzania dużych danych...
4Developers 2018: Pyt(h)on vs słoń: aktualny stan przetwarzania dużych danych...4Developers 2018: Pyt(h)on vs słoń: aktualny stan przetwarzania dużych danych...
4Developers 2018: Pyt(h)on vs słoń: aktualny stan przetwarzania dużych danych...
 
SphinxSE with MySQL
SphinxSE with MySQLSphinxSE with MySQL
SphinxSE with MySQL
 

More from freelancing_god

Sphinx: Beyond The Basics
Sphinx: Beyond The BasicsSphinx: Beyond The Basics
Sphinx: Beyond The Basicsfreelancing_god
 
From the Keyboard To The Community (Rails Underground)
From the Keyboard To The Community (Rails Underground)From the Keyboard To The Community (Rails Underground)
From the Keyboard To The Community (Rails Underground)freelancing_god
 
From the Keyboard to the Community
From the Keyboard to the CommunityFrom the Keyboard to the Community
From the Keyboard to the Communityfreelancing_god
 

More from freelancing_god (6)

Rails Camps
Rails CampsRails Camps
Rails Camps
 
ZSH and RVM
ZSH and RVMZSH and RVM
ZSH and RVM
 
LaughTrack
LaughTrackLaughTrack
LaughTrack
 
Sphinx: Beyond The Basics
Sphinx: Beyond The BasicsSphinx: Beyond The Basics
Sphinx: Beyond The Basics
 
From the Keyboard To The Community (Rails Underground)
From the Keyboard To The Community (Rails Underground)From the Keyboard To The Community (Rails Underground)
From the Keyboard To The Community (Rails Underground)
 
From the Keyboard to the Community
From the Keyboard to the CommunityFrom the Keyboard to the Community
From the Keyboard to the Community
 

Recently uploaded

Connecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfConnecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfNeo4j
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxLoriGlavin3
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...AliaaTarek5
 
Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Farhan Tariq
 
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality AssuranceInflectra
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .Alan Dix
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...Wes McKinney
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rick Flair
 
Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Hiroshi SHIBATA
 
Decarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityDecarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityIES VE
 
2024 April Patch Tuesday
2024 April Patch Tuesday2024 April Patch Tuesday
2024 April Patch TuesdayIvanti
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfMounikaPolabathina
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxLoriGlavin3
 

Recently uploaded (20)

Connecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfConnecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdf
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
 
Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...
 
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...
 
Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024
 
Decarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityDecarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a reality
 
2024 April Patch Tuesday
2024 April Patch Tuesday2024 April Patch Tuesday
2024 April Patch Tuesday
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdf
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
 

Solving the Riddle of Search: Using Sphinx with Rails