public
Description: Client API for Sphinx
Homepage: http://riddle.freelancing-gods.com
Clone URL: git://github.com/freelancing-god/riddle.git
Tue Nov 03 21:17:45 -0800 2009
commit  7ba2548aff982a7abd582e90e53bda779a8858d4
tree    6eba2c27c06f998354b9601e4339ad7d4e68bad3
parent  3f84922b802978d24a5ddd36e4376b4c82277e3a
riddle /
README.textile

This client has been written to interface with Sphinx. It is written by
Pat Allan, and has been influenced by both Dmytro Shteflyuk’s Ruby
client and the original PHP client – credit where credit’s due, after all.

It does not follow the same syntax as those two, though (not much point writing this otherwise) -
opting for a more Ruby-like structure.

The easiest way to install is to grab the gem from GitHub:

sudo gem install freelancing-god-riddle —source http://gems.github.com/

However, if you’re so inclined, you can grab sourcecode.

git clone git://github.com/freelancing-god/thinking-sphinx.git

If you’re looking for old versions – for older versions of Sphinx – you’ll want to peruse the tagged versions in the old subversion repository

svn co http://rails-oceania.googlecode.com/svn/patallan/riddle/tags riddle-tags

Please note that at the time of writing, the following versions are supported (if you get the appropriate tag):

  • 0.9.8-r871
  • 0.9.8-r909
  • 0.9.8-r985
  • 0.9.8-r1065
  • 0.9.8-r1112
  • 0.9.8-rc1 (gem version: 0.9.8.1198)
  • 0.9.8-rc2 (gem version: 0.9.8.1231)
  • 0.9.8 (gem version: 0.9.8.1371)

To get started, just instantiate a Client object:

client = Riddle::Client.new # defaults to localhost and port 3312 client = Riddle::Client.new “sphinxserver.domain.tld”, 3333 # custom settings

And then set the parameters to what you want, before running a query:

client.match_mode = :extended client.query “Pat Allan @state Victoria”

The results from a query are similar to the other clients – but here’s the details. It’s a hash with
the following keys:

  • :matches
  • :fields
  • :attributes
  • :attribute_names
  • :words
  • :total
  • :total_found
  • :time
  • :status
  • :warning (if appropriate)
  • :error (if appropriate)

The key :matches returns an array of hashes – the actual search results. Each hash has the
document id (:doc), the result weighting (:weight), and a hash of the attributes for
the document (:attributes).

The :fields and :attribute_names keys return list of fields and attributes for the
documents. The key :attributes will return a hash of attribute name and type pairs, and
:words returns a hash of hashes representing the words from the search, with the number of
documents and hits for each, along the lines of:

results[:words][“Pat”] #=> {:docs => 12, :hits => 15}

:total, :total_found and :time return the number of matches available, the
total number of matches (which may be greater than the maximum available), and the time in milliseconds
that the query took to run.

:status is the error code for the query – and if there was a related warning, it will be under
the :warning key. Fatal errors will be described under :error.

If you’ve installed the gem and wondering why there’s no tests – check out the svn version. I’ve kept the specs out of the gem as I have a decent amount of test data in there, which really isn’t needed unless you want to submit patches.

Contributors

Thanks to the following people who have contributed to Riddle in some shape or form:

  • Andrew Aksyonoff
  • Brad Greenlee
  • Lachie Cox
  • Jeremy Seitz
  • Mark Lane
  • Xavier Noria
  • Henrik Nye
  • Kristopher Chambers
  • Rob Anderton
  • Dylan Egan
  • Jerry Vos