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