Great to hear :)

-- 
Pat


On 31/01/2011, at 9:11 PM, Alex <[email protected]> wrote:

> Hi Pat,
> 
> Your suggestion got me there. The group by was raising an error, which
> I was able to get to by doing:
> 
> Campaign.search(args).results[:error]
> 
> It all appears to be working nicely now. Thanks for all your help.
> 
> Cheers
> Alex
> 
> 
> On Jan 28, 10:00 pm, Alex <[email protected]> wrote:
>> Thanks Pat. I will give it a go.
>> 
>> Cheers
>> Alex
>> 
>> On Jan 27, 10:44 pm, Pat Allan <[email protected]> wrote:
>> 
>> 
>> 
>>> Hi Alex
>> 
>>> Smart thinking with the index going on the Campaign model! Sounds like 
>>> that'll get around the multiple sites/promotions issue nicely.
>> 
>>> What does your query look like when you're grouping? And what does your 
>>> index definition look like in your Campaign model? Also, it's probably 
>>> worth checking whether there's any warnings in the search - if you're using 
>>> TS 2.0.2 or 1.4.2:
>> 
>>>   Campaign.search(arguments go here).warning
>> 
>>> Otherwise, in older releases:
>> 
>>>   Campaign.search(arguments go here).results[:warning]
>> 
>>> That may hold a clue to the zero results being returned.
>> 
>>> Cheers
>> 
>>> --
>>> Pat
>> 
>>> On 28/01/2011, at 2:17 AM, Alex wrote:
>> 
>>>> Hi Pat,
>> 
>>>> Thanks for your reply. What I've done is to define the index on the
>>>> model that provides the :through association, so in my case Campaign.
>>>> So, now when I perform a search with a location and keywords from the
>>>> Promotion, I get returned the Campaigns that match. As a Campaign
>>>> uniquely identifies one Promotion and one Site, I can walk the objects
>>>> and show the relevant Promotion/Site information. This is a big step
>>>> forward.
>> 
>>>> What I was hoping was that I could then group_by the
>>>> Campaign.promotion_id, so that if my search returned the same
>>>> Promotion but at more than 1 site, the group_by would eliminate the
>>>> duplicates. However, when I apply the group_by to my search I get no
>>>> rows returned from the search at all.
>> 
>>>> I've taken a look at the Sphinx docs for group_by, and I think I've
>>>> understood the purpose of the :attr group function, but still can't
>>>> understand why it doesn't work. Any ideas why this might be, or a way
>>>> to work around the problem?
>> 
>>>> Thank you so much again. You've done a fantastic job on Thinking
>>>> Sphinx.
>> 
>>>> Cheers
>>>> Alex
>> 
>>>> On Jan 26, 10:59 am, Pat Allan <[email protected]> wrote:
>>>>> Hi Alex
>> 
>>>>> I've no idea how common what you're trying to do is - it certainly sounds 
>>>>> reasonable, don't get me wrong. I've just never had someone ask in this 
>>>>> group how to solve such a scenario.
>> 
>>>>> What I have seen a fair bit of is situations where it's more of a 'many 
>>>>> franchises across multiple locations' kind of thing, where each location 
>>>>> belongs to only one franchise. That's what I was thinking of when I first 
>>>>> proposed a solution - because then you can search on locations and group 
>>>>> by franchise id to find just the closest of each franchise.
>> 
>>>>> You'll have no problems searching for the closest site (as you've found) 
>>>>> - but I don't think Sphinx will cut it for what you want with an array of 
>>>>> lat/lng values for each promotion. You could search for promotions, then 
>>>>> list sites by distance, but sorting by distance on promotions isn't 
>>>>> something Sphinx will handle in your setup, I'm pretty sure.
>> 
>>>>> Cheers
>> 
>>>>> --
>>>>> Pat
>> 
>>>>> On 25/01/2011, at 10:39 PM, Alex wrote:
>> 
>>>>>> Hi Pat,
>> 
>>>>>> I'm surprised to hear this isn't quite a common scenario. Applying the
>>>>>> logic to other similar models, for example Products and Stores. A
>>>>>> Store has a longitude and latitude, and the store has many Products.
>>>>>> Equally a Product can exist in many Stores. If you wanted to find
>>>>>> 'widgets' in stores in the London area, wouldn't this be modelled in a
>>>>>> similar way to my models described above?
>> 
>>>>>> Somehow I think I must be missing something, if this isn't a scenario
>>>>>> you've seen before.
>> 
>>>>>> As always, any insights would be greatly appreciated.
>> 
>>>>>> Thanks again.
>>>>>> Alex
>> 
>>>>>> On Jan 24, 11:56 pm, Pat Allan <[email protected]> wrote:
>>>>>>> Oh, it's a many-to-many... I didn't spot that the first time around. 
>>>>>>> That does make things more complicated. I've not seen this scenario 
>>>>>>> before.
>> 
>>>>>>> To be honest, I can't think of a neat solution at the moment - you 
>>>>>>> could run a search per site using the same params but just for 
>>>>>>> promotions, to get the relevant promotion per site, but the performance 
>>>>>>> on that would not be ideal... and then you'll hit situations where for 
>>>>>>> some sites you'll get more than one promotion matching.
>> 
>>>>>>> Sorry Alex, I can't think of an easy way to do this.
>> 
>>>>>>> --
>>>>>>> Pat
>> 
>>>>>>> On 25/01/2011, at 7:14 AM, Alex wrote:
>> 
>>>>>>>> Hi Pat,
>> 
>>>>>>>> Thank you for replying so promptly, it's really appreciated.
>> 
>>>>>>>> As advised, I've added an index to the Site model, like so:
>> 
>>>>>>>> class Site < ActiveRecord::Base
>>>>>>>>  acts_as_mappable
>> 
>>>>>>>>  # associations
>>>>>>>>  has_many :campaigns, :dependent => :destroy
>>>>>>>>  has_many :promotions, :through => :campaigns
>> 
>>>>>>>>  define_index do
>>>>>>>>    indexes promotions.title, :as => :promotions_title
>>>>>>>>    indexes promotions.details, :as => :promotions_details
>>>>>>>>    has promotions(:id), :as => :promotions_ids
>>>>>>>>    has 'RADIANS(sites.lat)', :as => :lat, :type => :float
>>>>>>>>    has 'RADIANS(sites.lng)', :as => :lng, :type => :float
>>>>>>>>    set_property :latitude_attr   => "lat"
>>>>>>>>    set_property :longitude_attr  => "lng"
>>>>>>>>  end
>>>>>>>> end
>> 
>>>>>>>> Then in my controller I do a Site.search 'widgets', :geo => [@lat,
>>>>>>>> @lng], :with => {"@geodist" => 0.0..10}
>> 
>>>>>>>> Now, here is where I get stuck. Sorry for the newb question....
>> 
>>>>>>>> That returns me an array of Sites. How do I get to the Promotions that
>>>>>>>> are associated with those sites in my views?
>> 
>>>>>>>> Thank you again for all your help.
>>>>>>>> Alex
>> 
>>>>>>>> On Jan 24, 1:51 pm, Pat Allan <[email protected]> wrote:
>>>>>>>>> Hi Alex
>> 
>>>>>>>>> Sphinx doesn't understand arrays of floats - so you can't have 
>>>>>>>>> multiple lat/lng values for a single record.
>> 
>>>>>>>>> What you're going to need to do is have a search index for your Site 
>>>>>>>>> model, and search upon that. You can use associations to pull in 
>>>>>>>>> promotion titles and details, as well as adding a promotion id as an 
>>>>>>>>> attribute.
>> 
>>>>>>>>> If you want, you could group your Site search results by promotion 
>>>>>>>>> id, thus ensuring you don't get duplicate promotions (if that's what 
>>>>>>>>> you'd prefer).
>> 
>>>>>>>>> Let me know if you get stuck.
>> 
>>>>>>>>> Cheers
>> 
>>>>>>>>> --
>>>>>>>>> Pat
>> 
>>>>>>>>> On 25/01/2011, at 12:35 AM, Alex wrote:
>> 
>>>>>>>>>> Hi,
>> 
>>>>>>>>>> I have models set up as follows:
>> 
>>>>>>>>>> class Promotion < ActiveRecord::Base
>> 
>>>>>>>>>>  # associations
>>>>>>>>>>  has_many :campaigns, :dependent => :destroy
>>>>>>>>>>  has_many :sites, :through => :campaigns
>> 
>>>>>>>>>>  define_index do
>>>>>>>>>>    indexes :title
>>>>>>>>>>    indexes :details
>> 
>>>>>>>>>>    indexes sites.lat, :as => :site_lat
>>>>>>>>>>    indexes sites.lng, :as => :site_lng
>>>>>>>>>>    has 'RADIANS(sites.lat)', :as => :lat, :type => :float
>>>>>>>>>>    has 'RADIANS(sites.lng)', :as => :lng, :type => :float
>>>>>>>>>>    set_property :latitude_attr   => "lat"
>>>>>>>>>>    set_property :longitude_attr  => "lng"
>>>>>>>>>>    has status, starts_at, expires_at
>>>>>>>>>>  end
>>>>>>>>>> end
>> 
>>>>>>>>>> class Campaign < ActiveRecord::Base
>>>>>>>>>>  belongs_to :promotion
>>>>>>>>>>  belongs_to :site
>>>>>>>>>> end
>> 
>>>>>>>>>> class Site < ActiveRecord::Base
>>>>>>>>>>  acts_as_mappable
>> 
>>>>>>>>>>  # associations
>>>>>>>>>>  has_many :campaigns, :dependent => :destroy
>>>>>>>>>>  has_many :promotions, :through => :campaigns
>>>>>>>>>> end
>> 
>>>>>>>>>> When I call Promotion.search I only get results for the promotions
>>>>>>>>>> that have a single record in Campaigns. So, If I have a Promotion 
>>>>>>>>>> that
>>>>>>>>>> is associated with more than 1 Site, I don't get any results back for
>>>>>>>>>> that Promotion. For example, I might have a Promotion with a title of
>>>>>>>>>> 'widgets' that is available in Birmingham and London. If I search 
>>>>>>>>>> with
>>>>>>>>>> the keyword 'widget' and location 'London', I would expect my search
>>>>>>>>>> to return the promotion, but, it doesn't. If I delete from the
>>>>>>>>>> Campaigns table the row that associates the promotion to the site in
>>>>>>>>>> Birmingham, and search again, the promotion gets returned
>>>>>>>>>> successfully.
>> 
>>>>>>>>>> Can anyone advise why this is, and what I need to change about my
>>>>>>>>>> search to be able to return Promotions that are associated with more
>>>>>>>>>> than one site?
>> 
>>>>>>>>>> Thanks for all your help
>>>>>>>>>> Alex
>> 
>>>>>>>>>> --
>>>>>>>>>> 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 
>>>>>> 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
>> 
>> ...
>> 
>> read more ยป
> 
> -- 
> 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.
> 

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