Hey Pat,

sorry, I am not sure what you mean? Is this:

> What's the output of the following?
>    Track.search('beat impelling', :order => 'category_name ASC')
> [:matches]

a typo?
Because i read your peepcode and something like "[:matches]" is
nowhere mentioned.....

If not, here is the output in "script/console":

>> Track.search('beat impelling', :order => 'category_name ASC')
=> [#<Track id: 1, artist: "foobar", title: "House", ................
>>  [:matches]
=> [:matches]



On Jun 4, 12:09 am, Pat Allan <[email protected]> wrote:
> What's the output of the following?
>    Track.search('beat impelling', :order => 'category_name ASC')
> [:matches]
>
> --
> Pat
>
> On 03/06/2009, at 11:44 AM, j0llyr0g3r wrote:
>
>
>
> > Hi Pat,
>
> > and thanks for your insights on this issue. I had to tweak your
> > proposal since
>
> >  indexes category.category_translations , :as => :category
>
> > won't work as category_translations is a 'real' table.
>
> > I defined my indexes now like that:
>
> >    has category.category_translations.name, :as => :category_name
> >    has theme.theme_translations.name, :as => :theme_name
>
> > I reindexed and restarted sphinx.
>
> > Unfortunately, it still isn't working:
>
> >  Track.search 'beat', :order => 'category_name asc'
>
> > now yields a correct resultset, but the sorting still doesn't work.
> > The following example illustrates this:
>
> >>> Track.search('beat impelling', :order => 'category_name ASC').each  
> >>> {|f| puts f.category.name}
> > Electro / House
> > Hip Hop
> > Funk
> > Techno / Trance
> > Rock
> > Pop
> > Hip Hop
> > Electro / House
> > Rock
> > Rock
> > Pop
>
> > "Tailing" my development.log at the same time shows this:
>
> > Sphinx: beat impelling
> > Sphinx Result: [1, 2, 13, 15, 18, 20, 22, 24, 39, 42, 49]
> >  Track Load (4.6ms)   SELECT * FROM `tracks` WHERE (`tracks`.`id` IN
> > (1,2,13,15,18,20,22,24,39,42,49))
> >  Category Load (3.2ms)   SELECT * FROM `categories` WHERE
> > (`categories`.`id` = 4)
> >  CategoryTranslation Load (0.9ms)   SELECT * FROM
> > `category_translations` WHERE (`category_translations`.category_id = 4
> > AND (`category_translations`.`locale` IN ('en','root')))
> >  Category Load (0.6ms)   SELECT * FROM `categories` WHERE
> > (`categories`.`id` = 7)
> >  CategoryTranslation Load (0.8ms)   SELECT * FROM
> > `category_translations` WHERE (`category_translations`.category_id = 7
> > AND (`category_translations`.`locale` IN ('en','root')))
> >  Category Load (0.6ms)   SELECT * FROM `categories` WHERE
> > (`categories`.`id` = 6)
> >  CategoryTranslation Load (0.8ms)   SELECT * FROM
> > `category_translations` WHERE (`category_translations`.category_id = 6
> > AND (`category_translations`.`locale` IN ('en','root')))
> >  Category Load (0.6ms)   SELECT * FROM `categories` WHERE
> > (`categories`.`id` = 16)
> >  CategoryTranslation Load (4.4ms)   SELECT * FROM
> > `category_translations` WHERE (`category_translations`.category_id =
> > 16 AND (`category_translations`.`locale` IN ('en','root')))
> >  Category Load (2.7ms)   SELECT * FROM `categories` WHERE
> > (`categories`.`id` = 15)
> >  CategoryTranslation Load (0.8ms)   SELECT * FROM
> > `category_translations` WHERE (`category_translations`.category_id =
> > 15 AND (`category_translations`.`locale` IN ('en','root')))
> >  Category Load (2.3ms)   SELECT * FROM `categories` WHERE
> > (`categories`.`id` = 13)
> >  CategoryTranslation Load (0.8ms)   SELECT * FROM
> > `category_translations` WHERE (`category_translations`.category_id =
> > 13 AND (`category_translations`.`locale` IN ('en','root')))
> >  Category Load (0.5ms)   SELECT * FROM `categories` WHERE
> > (`categories`.`id` = 7)
> >  CategoryTranslation Load (0.8ms)   SELECT * FROM
> > `category_translations` WHERE (`category_translations`.category_id = 7
> > AND (`category_translations`.`locale` IN ('en','root')))
> >  Category Load (0.5ms)   SELECT * FROM `categories` WHERE
> > (`categories`.`id` = 4)
> >  CategoryTranslation Load (0.8ms)   SELECT * FROM
> > `category_translations` WHERE (`category_translations`.category_id = 4
> > AND (`category_translations`.`locale` IN ('en','root')))
> >  Category Load (0.5ms)   SELECT * FROM `categories` WHERE
> > (`categories`.`id` = 15)
> >  CategoryTranslation Load (6.6ms)   SELECT * FROM
> > `category_translations` WHERE (`category_translations`.category_id =
> > 15 AND (`category_translations`.`locale` IN ('en','root')))
> >  Category Load (0.6ms)   SELECT * FROM `categories` WHERE
> > (`categories`.`id` = 15)
> >  CategoryTranslation Load (1.2ms)   SELECT * FROM
> > `category_translations` WHERE (`category_translations`.category_id =
> > 15 AND (`category_translations`.`locale` IN ('en','root')))
> >  Category Load (0.6ms)   SELECT * FROM `categories` WHERE
> > (`categories`.`id` = 13)
> >  CategoryTranslation Load (0.9ms)   SELECT * FROM
> > `category_translations` WHERE (`category_translations`.category_id =
> > 13 AND (`category_translations`.`locale` IN ('en','root')))
>
> > I don't get it, no errors in the logs, but obviously the order-clause
> > is ignored?
>
> > What am i doing wrong here?
>
> > On May 31, 8:25 pm, Pat Allan <[email protected]> wrote:
> >> You'll have to do *one* of the two following things:
> >> - Add that column as a sortable field (if you want the contents
> >> indexed for searching)
> >>    indexes category.category_translations, :as  
> >> => :category, :sortable
> >> => true
> >> - Or, add it as an attribute, which is implicitly sortable, but not
> >> indexed for searching
> >>    has category.category_translations, :as => :category
>
> >> And then stop Sphinx, re-index and restart Sphinx (rake
> >> thinking_sphinx:rebuild if you're running a new version of TS) and
> >> then you can search as follows:
> >>    Track.search 'beat', :order => :category # or 'category ASC'
>
> >> The problem with your current approach: Sphinx doesn't use SQL for
> >> searches. :joins and table names in :order mean nothing to Sphinx,  
> >> and
> >> so it gets confused and returns no results.
>
> >> Cheers
>
> >> --
> >> Pat
>
> >> On 31/05/2009, at 11:04 AM, j0llyr0g3r wrote:
>
> >>> Hey guys,
>
> >>> i have a model "track" with the following index structure:
>
> >>>  define_index do
> >>>    indexes tags, :sortable => true
> >>>    indexes short_description, :sortable => true
> >>>    indexes full_description, :sortable => true
> >>>    indexes artist, :sortable => true
> >>>    indexes title, :sortable => true
> >>>  end
>
> >>> This works fine so far....
>
> >>> Now, my model "track" has a belongs_to-association to the model
> >>> "category", which in turn has a "has_many"-association to the model
> >>> "category_translations" (globalize2)
>
> >>> So i thought i could do the following query and get back the results
> >>> sorted via category-name:
>
> >>> Track.search 'beat', :order => 'category_translations.name
> >>> ASC', :joins => {:category => :category_translations}
>
> >>> but this gives me an empty resultset.
>
> >>> In my log-files i can see the error:
>
> >>> Sphinx: beat
> >>> Sphinx Result: []
> >>> Sphinx Error: index track_core: sort-by attribute
> >>> 'category_translations' not found
>
> >>> What do i have to do in order to be able to sort after the category-
> >>> name?
> >>> Do i have to index it separately?
--~--~---------~--~----~------------~-------~--~----~
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