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