Hi Pat,

Thanks for the reply.

On 28 March 2010 05:43, Pat Allan <[email protected]> wrote:

> Hi Murray
>
> What you've found is just how Sphinx works - when using filters across
> multiple indexes, any without the needed attributes are ignored.


What I'm seeing feels like the opposite: the attributes that weren't present
in both indexes were ignored, rather than ignoring the index that didn't
include those attributes.


> 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.
>

That is a bit nicer than monkey patching TS, although I'm not too keen on
having to specify the index explicitly every time I want to search School's
using it's index.  To that end, I wonder, would it be worth having an option
to define_index to mark an index as "exclusive" for that model, and not to
automatically include superclass indexes in searches?  If the expected
behaviour with attributes is as I'm observing then subclass indexes that add
extra attributes become unusable (without doing as you suggest and
explicitly telling the search to only use this index for every query).

I'm happy to work up a patch if you think there's merit in it.

Cheers,

Murray

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]<thinking-sphinx%[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]<thinking-sphinx%[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.

Reply via email to