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