Hi Josh

This is untested, but I’d try the following in your index:

  # force both association joins
  join sponsorships
  join involved_sponsorships

  has ‘COUNT(DISTINCT sponsorships.id) + COUNT(DISTINCT 
involved_sponsorships.id)’,
    :as => :sponsorship_count, :type => :integer

Note that the join table names may need to be updated - look at the generated 
joins in config/development.sphinx.conf.

Is it possible for a constituent to have the same sponsorship object via both 
associations? If so, and you don’t want those sponsorships counted twice, 
something more complex is required. The solution below is *only* for PostgreSQL 
- I’m not sure what a MySQL solution would look like.

  # for PostgreSQL, using the intarray extension:
  # http://stackoverflow.com/a/24149630/54500
  has ‘array_length(array_agg(DISTINCT sponsorships.id) | array_agg(DISTINCT 
involved_sponsorships.id), 1)’,
    :as => :sponsorship_count, :type => :integer

As for custom SQL snippets in index definitions - you’ve got it right, it’s a 
string with SQL inside it. The SQL can be whatever you wish that’s valid within 
a SELECT clause for your given database.

Cheers

— 
Pat

> On 12 Dec 2014, at 6:26 pm, Josh Lehman <[email protected]> wrote:
> 
> I have a model that includes the follow two associations:
> 
> class Constituent
>    has_many :involved_sponsorships, :class_name => "Sponsorship", 
> :foreign_key => "paying_constituent_id"    
>    has_many :sponsorships
> 
> 
> The related Sponsorships model includes the following two relationships:
> 
> class Sponsorship
>    belongs_to :constituent
>    belongs_to :paying_constituent, :class_name => "Constituent", :foreign_key 
> => "paying_constituent_id"
>   
> ---
> 
> I need to create an index that will allow me to search based on a count of 
> sponsorships, BUT sponsorships in this context needs to include the total 
> quantity of BOTH the involved_sponsorships association and the sponsorships 
> association.
> 
> I know I can create the following filter which will count ONLY the 
> sponsorships associations:
> 
> has 'COUNT(sponsorships.id)', :as => :sponsorship_count, :type => :integer
> 
> I'm struggling to find a summary of how I might structure the custom SQL here 
> in the index to essentially handle joining the sponsorships count to the 
> involved_sponsorships count and index that as the :sponsorship_count
> 
> Hard to imagine this isn't something anybody else has tried to tackle but 
> I've come up fairly empty-handed in all my searches for a comparable 
> situation or example. On a related note, is there any documentation 
> specifically about the custom SQL syntax available in building these indexes? 
> Thanks for any help anybody is able to provide!
> 
> 
> 
>     
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "Thinking Sphinx" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to [email protected] 
> <mailto:[email protected]>.
> To post to this group, send email to [email protected] 
> <mailto:[email protected]>.
> Visit this group at http://groups.google.com/group/thinking-sphinx 
> <http://groups.google.com/group/thinking-sphinx>.
> For more options, visit https://groups.google.com/d/optout 
> <https://groups.google.com/d/optout>.

-- 
You received this message because you are subscribed to the Google Groups 
"Thinking Sphinx" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/thinking-sphinx.
For more options, visit https://groups.google.com/d/optout.

Reply via email to