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