github github
  • Home
  • Pricing and Signup
  • Training
  • Gist
  • Blog
  • Login

mwmitchell / rsolr

  • Admin
  • Watch Unwatch
  • Fork
  • Your Fork
  • Pull Request
  • Download Source
    • 87
    • 21
  • Source
  • Commits
  • Network (21)
  • Issues (4)
  • Downloads (5)
  • Wiki (1)
  • Graphs
  • Branch: master

click here to add a description

click here to add a homepage

  • Switch Branches (6)
    • http_errors
    • mapper
    • master ✓
    • optionified
    • resty
    • uri_refactor
  • Switch Tags (5)
    • v0.12.1
    • v0.12.0
    • pre-resty
    • 1.0.0.beta2
    • 1.0.0.beta
  • Branch List
Sending Request…

A Ruby client for Apache Solr — Read more

  Cancel

  Cancel
  • HTTP
  • Git Read-Only

This URL has Read+Write access

added some response.docs pagination blips 
mwmitchell (author)
Sun Aug 22 19:04:24 -0700 2010
commit  548985ddddd602348d2d
tree    0c691f33974e2fe04f2c
parent  64952f8056fa2e731db8
rsolr /
name age
history
message
file .gitignore Mon Jun 21 19:16:00 -0700 2010 various changes/comments [mwmitchell]
file LICENSE Thu Jun 17 20:34:09 -0700 2010 re-added license [mwmitchell]
file README.rdoc Thu Jul 08 18:53:29 -0700 2010 doc notes [mwmitchell]
file Rakefile Sat Jun 19 09:55:51 -0700 2010 pulled in original Rakefile and gemspec [mwmitchell]
file VERSION Sat Aug 07 15:26:34 -0700 2010 added before/after callbacks to mapper [mwmitchell]
file example.rb Sun Aug 22 19:04:24 -0700 2010 added some response.docs pagination blips [mwmitchell]
directory jetty/ Mon Jun 21 19:16:00 -0700 2010 various changes/comments [mwmitchell]
directory lib/ Sun Aug 22 19:04:24 -0700 2010 added some response.docs pagination blips [mwmitchell]
file rsolr.gemspec Sun Aug 22 19:04:24 -0700 2010 added some response.docs pagination blips [mwmitchell]
directory spec/ Wed Aug 18 11:00:55 -0700 2010 added error spec [mwmitchell]
directory tasks/ Tue Jun 29 20:01:16 -0700 2010 removed gemcutter blah from jeweler [mwmitchell]
README.rdoc

RSolr

A simple, extensible Ruby client for Apache Solr.

Notice: This document is only for the the 1.0 (pre-release) in the master branch. The last stable gem release documentation can be found here: github.com/mwmitchell/rsolr/tree/v0.12.1

Documentation

The code docs can be viewed here : rdoc.info/projects/mwmitchell/rsolr

Installation:

  sudo gem install rsolr

Example:

  require 'rubygems'
  require 'rsolr'

  # Direct connection
  solr = RSolr.connect :url => 'http://solrserver.com'

  # Connecting over a proxy server
  solr = RSolr.connect :url => 'http://solrserver.com', :proxy=>'http://user:pass@proxy.example.com:8080'

  # send a request to /select
  response = solr.get 'select', :params => {:q => '*:*'}

  # send a request to /catalog
  response = solr.get 'catalog', :params => {:q => '*:*'}

Querying

Use the #get / #post method to send search requests to the /select handler:

  response = solr.get 'select', :params => {
    :q=>'washington',
    :start=>0,
    :rows=>10
  }

The :params sent into the method are sent to Solr as-is. When an array is used, multiple parameters *with the same name* are generated for the Solr query. Example:

  solr.get 'select', :params => {:q=>'roses', :fq=>['red', 'violet']}

The above statement generates this Solr query:

  select?q=roses&fq=red&fq=violet

Method Missing

The RSolr::Client class also uses method_missing for setting the request handler/path:

  solr.paintings :params => {:q=>'roses', :fq=>['red', 'violet']}

This is sent to Solr as:

  paintings?q=roses&fq=red&fq=violet

Using POST for Search Queries

There may be cases where the query string is too long for a GET request. RSolr solves this issue by converting hash objects into form-encoded strings:

  response = solr.post "select", :data => enormous_params_hash

The :data hash is serialized as a form-encoded query string, and the correct content-type headers are sent along to Solr.

Updating Solr

Updating is done using native Ruby objects. Hashes are used for single documents and arrays are used for a collection of documents (hashes). These objects get turned into simple XML "messages". Raw XML strings can also be used.

Single document via #add

  solr.add :id=>1, :price=>1.00

Multiple documents via #add

  documents = [{:id=>1, :price=>1.00}, {:id=>2, :price=>10.50}]
  solr.add documents

The optional :add_attributes hash can also be used to set Solr "add" document attributes:

  solr.add documents, :add_attributes => {:commitWithin => 10}

Raw XML via #update

  solr.update :data => '<commit/>'
  solr.update :data => '<optimize/>'

When adding, you can also supply "add" xml element attributes and/or a block for manipulating other "add" related elements (docs and fields) by calling the xml method directly:

  doc = {:id=>1, :price=>1.00}
  add_attributes = {:allowDups=>false, :commitWithin=>10}
  add_xml = solr.xml.add(doc, add_attributes) do |doc|
    # boost each document
    doc.attrs[:boost] = 1.5
    # boost the price field:
    doc.field_by_name(:price).attrs[:boost] = 2.0
  end

Now the "add_xml" object can be sent to Solr like:

  solr.update :data => add_xml

Deleting

Delete by id

  solr.delete_by_id 1

or an array of ids

  solr.delete_by_id [1, 2, 3, 4]

Delete by query:

  solr.delete_by_query 'price:1.00'

Delete by array of queries

  solr.delete_by_query ['price:1.00', 'price:10.00']

Commit / Optimize

  solr.commit, :commit_attributes => {}
  solr.optimize, :optimize_attributes => {}

Response Formats

The default response format is Ruby. When the :wt param is set to :ruby, the response is eval’d resulting in a Hash. You can get a raw response by setting the :wt to "ruby" - notice, the string — not a symbol. RSolr will eval the Ruby string ONLY if the :wt value is :ruby. All other response formats are available as expected, :wt=>’xml’ etc..

Evaluated Ruby (default)

  solr.get 'select', :params => {:wt => :ruby} # notice :ruby is a Symbol

Raw Ruby

  solr.get 'select', :params => {:wt => 'ruby'} # notice 'ruby' is a String

XML:

  solr.get 'select', :params => {:wt => :xml}

JSON:

  solr.get 'select', :params => {:wt => :json}

Http Request Methods: get, post, and head

RSolr can send GET, POST and HEAD requests to Solr:

  response = solr.head "admin"

Related Resources & Projects

  • RSolr Google Group — The RSolr discussion group
  • rsolr-ext — An extension kit for RSolr
  • rsolr-direct — JRuby direct connection for RSolr
  • rsolr-nokogiri — Gives RSolr Nokogiri for XML generation.
  • SunSpot — An awesome Solr DSL, built with RSolr
  • Blacklight — A "next generation" Library OPAC, built with RSolr
  • java_bin — Provides javabin/binary parsing for RSolr
  • Solr — The Apache Solr project
  • solr-ruby — The original Solr Ruby Gem!

Note on Patches/Pull Requests

  • Fork the project.
  • Make your feature addition or bug fix.
  • Add tests for it. This is important so I don’t break it in a future version unintentionally.
  • Commit, do not mess with rakefile, version, or history (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
  • Send me a pull request. Bonus points for topic branches.

Note on Patches/Pull Requests

  • Fork the project.
  • Make your feature addition or bug fix.
  • Add tests for it. This is important so I don’t break it in a future version unintentionally.
  • Commit, do not mess with rakefile, version, or history. (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
  • Send me a pull request. Bonus points for topic branches.

Contributors

  • Colin Steele
  • Lorenzo Riccucci
  • Mike Perham
  • Mat Brown
  • Shairon Toledo
  • Matthew Rudy
  • Fouad Mardini
  • Jeremy Hinegardner
  • Nathan Witmer
  • Craig Smith

Author

Matt Mitchell <goodieboy@gmail.com>

Copyright

Copyright © 2008-2010 Matt Mitchell. See LICENSE for details.

Dedicated Server Powered by the Dedicated Servers and
Cloud Computing of Rackspace Hosting®
  • Blog
  • Support
  • Training
  • Job Board
  • Shop
  • Contact
  • API
  • Status
  • © 2010 GitHub Inc. All rights reserved.
  • Terms of Service
  • Privacy
  • Security
  • English
  • Deutsch
  • Français
  • 日本語
  • Português (BR)
  • 中文
  • See all available languages

Your current locale selection: English. Choose another?

  • English
  • Afrikaans
  • Català
  • Čeština
  • Deutsch
  • Español
  • Français
  • Hrvatski
  • Indonesia
  • Italiano
  • 日本語
  • Nederlands
  • Norsk
  • Polski
  • Português (BR)
  • Српски
  • Svenska
  • 中文