Hi Murray
What you've found is just how Sphinx works - when using filters across multiple
indexes, any without the needed attributes are ignored. And I feel it makes
sense for a superclass's index to be included when searching on subclasses.
That said, I think there's a neater way of working around this... just use
:index in your search:
School.search 'High',
:with => {:teacher_ids => User.first.id},
:index => 'school_core'
I guess it's a bit brittle, but probably better than monkeypatching TS.
Cheers
--
Pat
On 24/03/2010, at 2:01 AM, Muz wrote:
> Hi all,
>
> I've got an STI model setup to have separate indexes as follows:
>
> class Organization < ActiveRecord::Base
> define_index do
> indexes name
> end
> end
>
> class School < Organization
> has_many :teachers_join
> has_many :teachers :through => :teachers_join
>
> define_index do
> indexes name
> has teachers(:user_id), :as => :teacher_ids, :type => :integer
> end
> end
>
> What isn't working for me is doing something like:
>
> School.search('High', :with => {:teacher_ids => User.first.id)})
>
> I'd expect that to find me all the Schools belonging to User.first
> (assuming they were a teacher) with "High" in the name. However,
> regardless of what I put in as a :with (or :without) it just returns
> me all the schools with "High" in the name.
>
> I did some digging it looks like School.search_indexes has both
> school_core and organization_core in it, and it seems that
> because :teacher_ids isn't an attribute on organization_core, those
> filters just get ignored. If I make it so that the sphinx_indexes of
> School only contains the School index by adding:
>
> class << self
> def add_sphinx_index(index)
> super if index.model == self
> end
> end
>
> to my School class then it works as I expected it to.
>
> So my questions are:
>
> * Anyone else had this sort of problem?
> * Would this have any other side-affects?
> * Should I wrap this up in a more sensible patch?
>
> Cheers
>
> Murray
>
> --
> 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.
>
--
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.