Hello Pat, Tom,

Thanks for all your help. i finally got it working as Pat described
although the resultant SQL was prohibitively slow but I've managed to
fix this by modifying the query in the resultant sphinx.conf file.

This is the class

class Model < ActiveRecord::Base
  has_many :taggings, :dependent => :destroy
  has_many :tags, :through => :taggings
  has_many :expert_tags, :through => :taggings, :conditions =>
{'taggings.standard' => 3}, :source => :tag
  has_many :intermediate_tags, :through => :taggings, :conditions =>
{'taggings.standard' => 2}, :source => :tag
  has_many :basic_tags, :through => :taggings, :conditions =>
{'taggings.standard' => 1}, :source => :tag

  define_index do
    indexes [first_name, surname], :as => :full_name
    indexes gender
    indexes expert_tags(:name), :as => :expert_skills
    indexes intermediate_tags(:name), :as => :intermediate_skills
    indexes basic_tags(:name), :as => :basic_skills

    set_property :field_weights => {
      "expert_skills"       => 30,
      "intermediate_skills" => 10,
      "basic_skills"        => 1
    }
  end
end

This is the original SQL

SELECT `models`.`id` * 1 + 0 AS `id` ,
CAST(CONCAT_WS(' ', `models`.`first_name`, `models`.`surname`) AS
CHAR) AS `full_name`,
CAST(`models`.`gender` AS CHAR) AS `gender`, CAST(GROUP_CONCAT
(`tags`.`name` SEPARATOR ' ') AS CHAR) AS `expert_skills`,
CAST(GROUP_CONCAT(`intermediate_tags_models`.`name` SEPARATOR ' ') AS
CHAR) AS `intermediate_skills`,
CAST(GROUP_CONCAT(`basic_tags_models`.`name` SEPARATOR ' ') AS CHAR)
AS `basic_skills`,
`models`.`id` AS `sphinx_internal_id`,
374627805 AS `class_crc`,
'374627805' AS `subclass_crcs`,
0 AS `sphinx_deleted` FROM models
LEFT OUTER JOIN `taggings` ON (`models`.`id` = `taggings`.`model_id`)
LEFT OUTER JOIN `tags` ON (`tags`.`id` = `taggings`.`tag_id`) AND
`taggings`.`standard` = 3
LEFT OUTER JOIN `taggings` intermediate_tags_models_join ON
(`models`.`id` = `intermediate_tags_models_join`.`model_id`)
LEFT OUTER JOIN `tags` intermediate_tags_models ON
(`intermediate_tags_models`.`id` =
`intermediate_tags_models_join`.`tag_id`) AND `taggings`.`standard` =
2
LEFT OUTER JOIN `taggings` basic_tags_models_join ON (`models`.`id` =
`basic_tags_models_join`.`model_id`)
LEFT OUTER JOIN `tags` basic_tags_models ON (`basic_tags_models`.`id`
= `basic_tags_models_join`.`tag_id`) AND `taggings`.`standard` = 1
WHERE `models`.`id` >= $start   AND `models`.`id` <= $end
GROUP BY `models`.`id`  ORDER BY NULL

This is my modified SQL:

SELECT `models`.`id` * 1 + 0 AS `id` ,
CAST(CONCAT_WS(' ', `models`.`first_name`, `models`.`surname`) AS
CHAR) AS `full_name`,
CAST(`models`.`gender` AS CHAR) AS `gender`,
CAST(GROUP_CONCAT(`expert_tags`.`name` SEPARATOR ' ') AS CHAR) AS
`expert_skills`,
CAST(GROUP_CONCAT(`intermediate_tags`.`name` SEPARATOR ' ') AS CHAR)
AS `intermediate_skills`,
CAST(GROUP_CONCAT(`basic_tags`.`name` SEPARATOR ' ') AS CHAR) AS
`basic_skills`,
`models`.`id` AS `sphinx_internal_id`,
374627805 AS `class_crc`,
'374627805' AS `subclass_crcs`,
0 AS `sphinx_deleted` FROM models
LEFT OUTER JOIN `taggings` ON (`models`.`id` = `taggings`.`model_id`)
LEFT OUTER JOIN `tags` expert_tags ON (`expert_tags`.`id` =
`taggings`.`tag_id`) AND `taggings`.`standard` = 3
LEFT OUTER JOIN `tags` intermediate_tags ON (`intermediate_tags`.`id`
= `taggings`.`tag_id`) AND `taggings`.`standard` = 2
LEFT OUTER JOIN `tags` basic_tags ON (`basic_tags`.`id` =
`taggings`.`tag_id`) AND `taggings`.`standard` = 1
WHERE `models`.`id` >= 1   AND `models`.`id` <= 3000
 GROUP BY `models`.`id`  ORDER BY NULL

This really seemed to speed things up. The original SQL didn't
complete even after 40 minutes. Then new SQL completed in about 2
minutes.

Thanks for all your help. It's been a mission to get this working
nicely. Thank you for such an excellent plugin.


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