On Jul 28, 6:27 am, Pat Allan <[email protected]> wrote:
> Sphinx can't (yet) filter on strings. That's upcoming in 0.9.10,
> apparently.
> The following syntax is fine:
>    Tree.search 'sapling', :with => {:variety => [1, 2, 3]}

Yes, in fact my example was overly simple. Currently I only use this
on numbers in multi attributes. Sorry for the confusion.

> Err, I'm more than a little surprised that code works.
> From a Sphinx API perspective, you can't send through arrays of  
> arrays, or strings, when it comes to filters. So, if you're getting  
> the right results, I'd personally put it down to some fluke in Sphinx.  
> Don't make any assumptions on this working for production sites.

Yes, :with expects a hash, but if you give it an array it works too,
because of the way the Riddle filters are created in search.rb.

If you have this:

  Tree.search 'sapling', :with => [['variety', [1, 2]], ['variety',
[3]]]

The filters are generated here:

        client.filters += options[:with].collect { |attr,val|
          Riddle::Client::Filter.new attr.to_s, filter_value(val)
        } if options[:with]

And this will generate two riddle filters on the attribute 'variety',
one with the filter value of [1,2] and one with the filter value of
[3]. This creates a query where both filters must match for all the
documents returned. If you pass a hash, then you can only have one
filter on variety, because it must be a unique key.

I guess this behavior was unintentional on your part, but I like it!
It is certainly a valid thing to do in sphinx.

-elijah
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Thinking Sphinx" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/thinking-sphinx?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to