Loading...

thinking-sphinx@googlegroups.com

[Prev] Thread [Next]  |  [Prev] Date [Next]

[ts] Re: Problems with Grouping Xavi Arnaus Thu Feb 19 08:00:59 2009

Yeah! right!

The parameter :group_by expects an string which is the symbol defined
as the alias of the field.

So, finally, the good one related to the define_index above is the
following:

Post.search params[:q], :group_by =>
'related_topic_id', :group_function => :attr

Now I have to order the results, but it is out of this topic ;)

Thank you very much Josh.

On Feb 19, 3:53 pm, Josh <[EMAIL PROTECTED]> wrote:
> You might be right, I'm noticing a few differences.  I'm calling
> search with a string rather than a symbol, so you might try that, but
> you'll need the alias you assigned instead of the actual column name:
>
> Post.search params[:q], :group_by
> => 'related_topic_id', :group_function => :attr
>
> Also, in my index definition I define the ID in the local table rather
> than the related table, but I can't imagine that would make a
> difference.  But, if you're still stuck, you could try changing it:
>
>   has topic_id, :as => :related_topic_id
>
> Let us know if that helps,
>
> - Josh
>
> On Feb 19, 9:21 am, Xavi Arnaus <[EMAIL PROTECTED]> wrote:
>
> > I've tried your solution and throws me the same error than without
> > the :group_function :
>
> > Post.search params[:q], :group_by
> > => :related_topic_id, :group_function => :attr
>
> > => NoMethodError: undefined method `bytesize'
> > for :related_topic_id:Symbol
>
> > I think that somehow the :group_by parameter expects something
> > different than the symbol... If I put the field 'topic_id' as string
> > it runs without crashing but nothing is returned... I'm really
> > confused about the diference between each :group_* parameter and what
> > they expect as a value.
>
> > Have you get any results doing the grouping like you said? Can you
> > post your define_index?
>
> > Thank you.
>
> > On Feb 19, 2:37 pm, Josh <[EMAIL PROTECTED]> wrote:
>
> > > Xavi,
>
> > > I'm doing something very similar, and it took me some trial and error
> > > to figure it out as well.  I think you need the group_function
> > > parameter, but it needs to describe the type of grouping you want, not
> > > the field.  Try this:
>
> > > @posts = Post.search params[:q], :group_by
> > > => :related_topic_id, :group_function => :attr
>
> > > Hopefully that will give you what you're looking for.  If so, you'll
> > > have to decide which match you want in the case where there are
> > > multiple posts with the same topic ID.  For that you'll need a
> > > combination of the :order and :group_clause params.  I found it a
> > > little confusing - it seems that :order will control which of your
> > > grouped items is used, and :group_clause becomes the overall sort for
> > > all your results.
>
> > > Good luck,
>
> > > - Josh
>
> > > On Feb 19, 4:37 am, Xavi Arnaus <[EMAIL PROTECTED]> wrote:
>
> > > > Hi all
>
> > > > I'm trying to implement a searching with grouped results as follows:
>
> > > > It is a one-to-many relation between Topics and Posts, where each
> > > > Topic has the title and many Posts, which each one has its own text.
>
> > > > I'm trying to make the search by Posts so in the results page I can
> > > > point to the Topic but placing the navigator to the Post where the
> > > > match appears. Everything works fine until here:
>
> > > > in the Post model:
>
> > > > belongs_to :topic
> > > > define_index do
> > > >     # fields
> > > >     indexes topic.title, :as => :related_topic_title
> > > >     indexes text
> > > >     indexes created_at, :sorteable => true
>
> > > >     # attributes
> > > >     has created_at
> > > >     has topic(:id), :as => :related_topic_id       # field is topic_id
> > > > in Posts
> > > >   end
>
> > > > in the controller, within the search action:
>
> > > > @posts = Post.search params[:q]
>
> > > > Ok, now the problem:
> > > > If in a Topic there's more than one Post where there is a match, I
> > > > recieve (obviously) all the posts. But as I want to show the results
> > > > by Topic, I need to group all posts by Topic. I tried a lot of
> > > > combinations:
>
> > > > @posts = Post.search params[:q], :group_by => :related_topic_id
> > > > [ERROR: undefined method 'bytesize' for symbol]
> > > > @posts = Post.search params[:q], :group_funcion => :related_topic_id
> > > > [ERROR: can't convert nil to Integer]
> > > > @posts = Post.search params[:q], :group_by => 'topic_id' [FAILS: no
> > > > matches!!]
> > > > @posts = Post.search params[:q], :group_funcion
> > > > => :related_topic_id, :group_clause => "created_at DESC" [FAILS: no
> > > > grouping is done]
>
> > > > So, as documentation is a little poor in grouping, can anyone help me
> > > > on this? How can I group all Posts in a Topic? Ideally, pointing to
> > > > the first Post of that matches in a Topic is enough...
>
> > > > Keep in mind I'm a newbe on Sphinx
> > > > Thank you for your time.
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---