Thanks Pat! On May 25, 5:56 am, Pat Allan <[email protected]> wrote: > Figured out and fixed it - the fault is with acts-as-taggable-on, as it has > explicit conditions for the joins that don't allow for join aliases. TS now > checks for these (only if you're using acts-as-taggable-on), and replaces > them appropriately. > > Fix is in both master and rails3 branches, will hopefully have gem releases > out soon. > > -- > Pat > > On 24/05/2011, at 3:05 PM, sparky wrote: > > > > > > > > > Thanks Pat, please let me know if there's any info I can provide to > > help. I'm digging through the code to see if I can come up with a > > patch so any thoughts on where to start poking around would help me > > out. > > > Thanks again. > > > s.park > > > On May 24, 12:23 am, Pat Allan <[email protected]> wrote: > >> Someone else raised this issue just the other day as well. I'll hopefully > >> have some time to create a test app and give it a spin soon, see if I can > >> figure out what's causing the problems. > > >> -- > >> Pat > > >> On 24/05/2011, at 2:46 AM, sparky wrote: > > >>> I have a model that has acts_as_taggable in 2 contexts > > >>> class Asset < ActiveRecord::Base > >>> acts_as_taggable > >>> acts_as_taggable_on :categories > > >>> ... > >>> end > > >>> Basically, I want to maintain a list of tags for the Asset as well as > >>> a list of catergories. Both of which I'd like to index. > > >>> When I define the indices, > > >>> I tried > > >>> define_index do > >>> indexes tags.name, :as => :categories > >>> indexes categories.name, :as => :tags > >>> .... > >>> end > > >>> which generates the following sql..... (relevant snippets shown) > >>> sql_query = SELECT ... > >>> GROUP_CONCAT(DISTINCT IFNULL(`tags`.`name`, '0') SEPARATOR ' ') AS > >>> `categories`, > >>> GROUP_CONCAT(DISTINCT IFNULL(`categories_assets`.`name`, '0') > >>> SEPARATOR ' ') AS `tags` > >>> .... > >>> FROM `assets` > >>> LEFT OUTER JOIN `taggings` ON `assets`.`id` = `taggings`.`taggable_id` > >>> AND `taggings`.`taggable_type` = 'Asset' > >>> LEFT OUTER JOIN `tags` ON taggings.tagger_id IS NULL AND > >>> taggings.context = 'tags' > >>> LEFT OUTER JOIN `taggings` `categories_assets_join` ON `assets`.`id` = > >>> `categories_assets_join`.`taggable_id` AND > >>> `categories_assets_join`.`taggable_type` = 'Asset' LEFT OUTER JOIN > >>> `tags` `categories_assets` ON taggings.tagger_id IS NULL AND > >>> taggings.context = 'categories' > > >>> The problem is here 2 fold it looks like. In the joins, it joins on > >>> the tagging tables twice, and in the join to the actual tags table, > >>> it doesn't specify the tag.id so I get a massively cartesian query > >>> that takes forever to run and indexes the wrong data. > > >>> What I think the from clause should look like is more like > > >>> LEFT OUTER JOIN `taggings` ON `assets`.`id` = > >>> `taggings`.`taggable_id` AND `taggings`.`taggable_type` = 'Asset' > >>> LEFT OUTER JOIN `tags` category_tags ON taggings.context = > >>> 'categories' and taggings.tag_id = category_tags.id > >>> LEFT OUTER JOIN `tags` tag_tags ON taggings.context = 'tags' and > >>> taggings.tag_id = tag_tags.id > > >>> So my question is the following. What's the best way to fix the > >>> indexing query? Should I try and figure out how the sql is being > >>> generated and submit a patch? Should i disabled the ts:config and > >>> handwrite the config or have I missed a way to pass in my own indexing > >>> query into sphinx.yml so that I can free regenerate the config file > >>> but use my query. > > >>> Thanks in advance for any help. > > >>> s.park > > >>> -- > >>> 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 > >>> athttp://groups.google.com/group/thinking-sphinx?hl=en. > > > -- > > 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 > > athttp://groups.google.com/group/thinking-sphinx?hl=en.
-- 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.
