Ah, that's just the email client wrapping my code - put it all on one
line. Here's another example without the search term (although you
should keep that in):
Track.search(:order => 'category_name ASC')[:matches]
--
Pat
On 04/06/2009, at 7:51 AM, j0llyr0g3r wrote:
>
> 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
-~----------~----~----~----~------~----~------~--~---