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

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
 
Top 10 Hubspot Development Companies in 2024
Top 10 Hubspot Development Companies in 2024Top 10 Hubspot Development Companies in 2024
Top 10 Hubspot Development Companies in 2024TopCSSGallery
 
Digital Tools & AI in Career Development
Digital Tools & AI in Career DevelopmentDigital Tools & AI in Career Development
Digital Tools & AI in Career DevelopmentMahmoud Rabie
 
Kuma Meshes Part I - The basics - A tutorial
Kuma Meshes Part I - The basics - A tutorialKuma Meshes Part I - The basics - A tutorial
Kuma Meshes Part I - The basics - A tutorialJoão Esperancinha
 
Accelerating Enterprise Software Engineering with Platformless
Accelerating Enterprise Software Engineering with PlatformlessAccelerating Enterprise Software Engineering with Platformless
Accelerating Enterprise Software Engineering with PlatformlessWSO2
 
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...Nikki Chapple
 
All These Sophisticated Attacks, Can We Really Detect Them - PDF
All These Sophisticated Attacks, Can We Really Detect Them - PDFAll These Sophisticated Attacks, Can We Really Detect Them - PDF
All These Sophisticated Attacks, Can We Really Detect Them - PDFMichael Gough
 
WomenInAutomation2024: AI and Automation for eveyone
WomenInAutomation2024: AI and Automation for eveyoneWomenInAutomation2024: AI and Automation for eveyone
WomenInAutomation2024: AI and Automation for eveyoneUiPathCommunity
 
Testing tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesTesting tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesKari Kakkonen
 
Tampa BSides - The No BS SOC (slides from April 6, 2024 talk)
Tampa BSides - The No BS SOC (slides from April 6, 2024 talk)Tampa BSides - The No BS SOC (slides from April 6, 2024 talk)
Tampa BSides - The No BS SOC (slides from April 6, 2024 talk)Mark Simos
 
Microsoft 365 Copilot: How to boost your productivity with AI – Part two: Dat...
Microsoft 365 Copilot: How to boost your productivity with AI – Part two: Dat...Microsoft 365 Copilot: How to boost your productivity with AI – Part two: Dat...
Microsoft 365 Copilot: How to boost your productivity with AI – Part two: Dat...Nikki Chapple
 
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotes
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotesMuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotes
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotesManik S Magar
 
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
 
Microservices, Docker deploy and Microservices source code in C#
Microservices, Docker deploy and Microservices source code in C#Microservices, Docker deploy and Microservices source code in C#
Microservices, Docker deploy and Microservices source code in C#Karmanjay Verma
 
QCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architecturesQCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architecturesBernd Ruecker
 
React Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App FrameworkReact Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App FrameworkPixlogix Infotech
 
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Alkin Tezuysal
 
Glenn Lazarus- Why Your Observability Strategy Needs Security Observability
Glenn Lazarus- Why Your Observability Strategy Needs Security ObservabilityGlenn Lazarus- Why Your Observability Strategy Needs Security Observability
Glenn Lazarus- Why Your Observability Strategy Needs Security Observabilityitnewsafrica
 
Landscape Catalogue 2024 Australia-1.pdf
Landscape Catalogue 2024 Australia-1.pdfLandscape Catalogue 2024 Australia-1.pdf
Landscape Catalogue 2024 Australia-1.pdfAarwolf Industries LLC
 
Manual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance AuditManual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance AuditSkynet Technologies
 

Recently uploaded (20)

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
 
Top 10 Hubspot Development Companies in 2024
Top 10 Hubspot Development Companies in 2024Top 10 Hubspot Development Companies in 2024
Top 10 Hubspot Development Companies in 2024
 
Digital Tools & AI in Career Development
Digital Tools & AI in Career DevelopmentDigital Tools & AI in Career Development
Digital Tools & AI in Career Development
 
Kuma Meshes Part I - The basics - A tutorial
Kuma Meshes Part I - The basics - A tutorialKuma Meshes Part I - The basics - A tutorial
Kuma Meshes Part I - The basics - A tutorial
 
Accelerating Enterprise Software Engineering with Platformless
Accelerating Enterprise Software Engineering with PlatformlessAccelerating Enterprise Software Engineering with Platformless
Accelerating Enterprise Software Engineering with Platformless
 
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
 
All These Sophisticated Attacks, Can We Really Detect Them - PDF
All These Sophisticated Attacks, Can We Really Detect Them - PDFAll These Sophisticated Attacks, Can We Really Detect Them - PDF
All These Sophisticated Attacks, Can We Really Detect Them - PDF
 
WomenInAutomation2024: AI and Automation for eveyone
WomenInAutomation2024: AI and Automation for eveyoneWomenInAutomation2024: AI and Automation for eveyone
WomenInAutomation2024: AI and Automation for eveyone
 
Testing tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesTesting tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examples
 
Tampa BSides - The No BS SOC (slides from April 6, 2024 talk)
Tampa BSides - The No BS SOC (slides from April 6, 2024 talk)Tampa BSides - The No BS SOC (slides from April 6, 2024 talk)
Tampa BSides - The No BS SOC (slides from April 6, 2024 talk)
 
Microsoft 365 Copilot: How to boost your productivity with AI – Part two: Dat...
Microsoft 365 Copilot: How to boost your productivity with AI – Part two: Dat...Microsoft 365 Copilot: How to boost your productivity with AI – Part two: Dat...
Microsoft 365 Copilot: How to boost your productivity with AI – Part two: Dat...
 
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotes
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotesMuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotes
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotes
 
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...
 
Microservices, Docker deploy and Microservices source code in C#
Microservices, Docker deploy and Microservices source code in C#Microservices, Docker deploy and Microservices source code in C#
Microservices, Docker deploy and Microservices source code in C#
 
QCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architecturesQCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architectures
 
React Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App FrameworkReact Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App Framework
 
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
 
Glenn Lazarus- Why Your Observability Strategy Needs Security Observability
Glenn Lazarus- Why Your Observability Strategy Needs Security ObservabilityGlenn Lazarus- Why Your Observability Strategy Needs Security Observability
Glenn Lazarus- Why Your Observability Strategy Needs Security Observability
 
Landscape Catalogue 2024 Australia-1.pdf
Landscape Catalogue 2024 Australia-1.pdfLandscape Catalogue 2024 Australia-1.pdf
Landscape Catalogue 2024 Australia-1.pdf
 
Manual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance AuditManual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance Audit
 

Solving the Riddle of Search: Using Sphinx with Rails