[LRUG] [Off Topic] Sphinx Filter

Andrew Stewart boss at airbladesoftware.com
Fri Apr 25 03:37:48 PDT 2008


On 25 Apr 2008, at 01:09, Pat Allan wrote:

> That aside, you'll want to set up an attribute (not a field) for the
> published column - as attributes are ints, bools, floats, datetimes
> and strings-converted-to-ordinal-ints (last is only useful for
> sorting, not filtering). Then, as Steve's pointed out, you can filter
> on it.

Aha!  I hadn't appreciated the difference between attributes and  
fields.  I read Sphinx's docs and Thinking Sphinx's docs (excellent,  
by the way) and now I understand.


> Not sure if Sphincter supports attributes, but both Ultrasphinx and
> Thinking Sphinx (disclosure: my own plugin) do.

It turns out that Sphincter handles attributes automatically; so  
automatically that neither the documentation nor the API mentions  
them or explain their significance.  I guess that's both good and bad  
depending on your point of view.

Anyway, I make article model searchable like this:

   class Article < ActiveRecord::Base
     add_index :fields => %w( title body published )
   end

-- and Sphincter takes care of using the published column as an  
attribute to filter on...once you've rebuilt the Sphinx configuration  
file.  Not doing so was the cause of my lower-level problem.  Now the  
command line search works fine:

$ search -c sphinx/development/sphinx.conf -i articles -f published 1  
portim

My search code looks like this:

   Article.search 'foo', :conditions => {:published => 1}, :page =>  
blah, :per_page => blah

As you can(not) see, no explicit attributes in sight.

Anyway, somewhere along the line I realised Sphincter doesn't support  
delta indexing, and so when I make an article unpublished, I need to  
rebuild the index.  My tests were going awry because I wasn't  
reindexing every time I toggled an article's published column.  I am  
now, and everything works as expected.


> They also have the
> advantage of working with the latest version of Sphinx.

Aah.  I also notice that Sphincter causes Sphinx to generate lots of  
deprecation warnings like "key 'sql_group_column' is deprecated ...;  
use 'sql_attr_uint' instead."

Having checked out Ultrasphinx and Thinking Sphinx, I'm a whisker  
away from replacing Sphincter with one of them.  I'll certainly do it  
if I need a capability that Sphincter doesn't offer.  I'd probably go  
with Thinking Sphinx because the documentation is clearer and I think  
I prefer its API.

So thanks Pat and Steve for your help.

Cheers,
Andy

-------
AirBlade Software
http://airbladesoftware.com







More information about the Chat mailing list