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