Thanks for your response Tom, I don't think that this would work
though as all the skills would be concatenated into a single field and
so would the expertise. I imagine that a record returned would look
something like this:

Name: Joe Bloggs
Skills: Eating Juggling Fishing German Kung Fu
Expertise: 3 1 2 2 3

Joe Bloggs is great at eating and he's great at Kung Fu but if I
search for "Joe Bloggs", Eating or "Kung Fu" then he should be
appearing near the top. With the concatenated fields there's no way to
match up Kung Fu with the 3 or Juggling with the 1. If I order by the
expertise then it's merely going to return.... well I don't know what
it'll return but there's no method of identifying the skill with the
expertise. If I do skills search i.e. Skill.search "juggling", :order
=> expertise then this would work because I'd have an array of the
skills and expertise but I also want to search by name which is in the
parent (Person) model.

The end result is that I want an array of people with either that
name, or those skills.

I'm starting to think that my best best is to search Skills and group
by the foreign key - person id. Then retrieve those people and combine
them with a seperate People.search "keywords". I've seen that you can
do a multiple class search but I only want one class type (People) to
be in the search results.

Confused? I am.

If I sort this out then I'd be happy to write it up as a Blog Post for
other developers.

On Apr 5, 8:00 pm, Tom Davies <[email protected]> wrote:
> For the sorting try (@weight makes sure relevancy is the first sort
> order with most relevant first):
>
> :order =>"@weight DESC, expertise DESC"
>
> For the only expert try:
>
> :conditions => {:expert => 3}
>
> On Apr 2, 8:15 pm, Kevin Monk <[email protected]> wrote:
>
> > Apologies for the title. I was thinking for ages before I came up with
> > that. I've been racking my brain over this for a few hours now and
> > would appreciate any help with this.
>
> > I have the following model:
>
> > class Person < ActiveRecord::Base
>
> >   has_many   :abilities
> >   has_many   :skills, :through => :abilities
>
> >   define_index do
> >     # fields
> >     indexes [:first_name, :last_name], :as => :name, :sortable => true
> >     indexes abilities.standard, :as => :expertise, :sortable => true
> >     # where 3 - Expert, 2 - Intermediate, 1 - Basic
> >     indexes skills.title, :as => :skills_title
> >   end
> > end
>
> > Supposing I have a single search text box and I wanted to search for a
> > person who could "juggle" but i'd like to order the results by
> > expertise so that the expert jugglers came top. I would like all
> > jugglers to be returned as search results but with experts being
> > returned at the top. How might I search for this?
>
> > Person.search "juggler", :order => :expertise
>
> > This isn't going to work as presumably ....
>
> >  indexes abilities.standard, :as => :expertise, :sortable => true
>
> > ... just concatenates all the standards into a single field
> > irrespective of whether that ability is in "juggling"
>
> > Additionally...  How could I set up a condition to only return expert
> > jugglers?
--~--~---------~--~----~------------~-------~--~----~
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