Hey Pat,

Unfortunately, it has to be user_id = ? or group_id = ? so the 'has'
statement that you mentioned wouldn't work.

I was also a little confused on the odd selection of ids that was
returned.  I will see if what you mentioned is the reason.

Thanks for the help.

On Nov 1, 5:54 pm, Pat Allan <[email protected]> wrote:
> Hi Chris
>
> If I'm understanding this correctly - you want Posts that match on either 
> group id *or* user id - but filters use *and* logic, and there's no way to 
> change that.
>
> That said, it doesn't quite explain the results you're getting. I wonder if 
> that's related to you having a field and an attribute with the same 
> name/alias (group_id) - this may confuse Sphinx's indexer.
>
> As a workaround to the initial problem, though... perhaps the following could 
> help?
>   has [user_id, submissions.group.users.id], :as => :user_ids
>
> (I'm guessing your associations, but hopefully it's clear - pull all relevant 
> user ids for each post into a single multi-value attribute).
>
> Cheers
>
> --
> Pat
>
> On 02/11/2010, at 8:27 AM, chris wrote:
>
>
>
>
>
>
>
> > I am doing a search for user posts that either they have made or that
> > were made for a group they belong to.
>
> > ## Method
> >  def self.find_all_activity_for_user(user_id, filter, page=1)
> >    group_ids = User.find(user_id).groups.map(&:id)
> >    groups = Group.all(:conditions => {:id => group_ids})
>
> >    puts "PostIds for User
> > #{Post.find_all_by_user_id(user_id).map(&:id).join(',')}"
> >    puts "PostIds for Groups #{groups.map { |g|
> > g.submissions.map(&:post_id)}.first}"
>
> >    Post.search(filter,
> >                :with => {:group_id => group_ids, :user_id =>
> > user_id},
> >                :match_mode => :any,
> >                :page => page,
> >                :per_page => self.per_page)
> >  end
>
> > ## puts output
> > PostIds for User 1023110940,1023110938,1023110939
> > PostIds for Groups 1023110939
>
> > ## generated sql
> > SELECT * FROM `posts` WHERE (`posts`.`id` IN (1023110939,1023110940))
> > AND (posts.draft = 0) ORDER BY posts.created_at DESC
>
> > ## AR class
> > class Post < Act...
>
> >  define_index do
> >    indexes title, tags, body
> >    indexes [user.first_name, user.last_name], :as => :user_name
> >    indexes links.base_uri, :as => "link_url"
> >    indexes links.title, :as => "link_title"
> >    indexes links.description, :as => "link_description"
> >    indexes links.keywords, :as => "link_keywords"
> >    indexes links.source, :as => "link_source"
> >    indexes assets.upload_file_name, :as => "upload_file_name"
> >    indexes submissions.group_id, :as => "group_id"
>
> >    has user_id, created_at
> >    has submissions.group_id, :as => "group_id"
>
> >    where "draft = 0"
> >    set_property :delta => true
> >  end
>
> > end
>
> > Based on the ids it can be seen that right now all the posts are by
> > the one user, while only one was to the group.
> >  PostIds for User 1023110940,1023110938,1023110939
> >  PostIds for Groups 1023110939
>
> > So xx38, xx39, xx40 should be in the query, yet the final sql only
> > searches for 2 of the items
> >  IN (1023110939,1023110940)
>
> > Can what I am trying to do be done?
>
> > --
> > 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.

Reply via email to