Thanks! For now I think just pulling out the first excerpt is the most important thing (to highlight in search results, but not on post page). To do this, I have the post aggregate all comments and index that. Then I have comments also indexed. When showing search results, if there is no excerpt for the post, then I ask Sphinx for matching comments and find the first one. It's not perfect (for example, we might not get any hits on comments if no single comment contains all the keywords), but it seems to be good enough for now. If we get a lot of blanks, then I may switch match_mode when searching for comments to :any.
On Thu, Dec 23, 2010 at 12:19 AM, Pat Allan <[email protected]>wrote: > Hi Jenny > > The way I'd go about this is to add the comment bodies to the post index - > as you've suggested. As for highlighting, Sphinx calls this excerpts. While > not quite as elegant for data via associations, I'd recommend doing the > following: > > * Create a method in your post model for the comment bodies: > > def comment_bodies > comments.collect(&:body).join(' ') > end > > * Access excerpts for that method: > > <%= post.excerpts.comment_bodies %> > > http://freelancing-god.github.com/ts/en/excerpts.html > > You may want to merge the post body in with the comment bodies for that > excerpted text, unless they're going to be separate when displayed in the > search results. > > And yes, it's not super performant either, but nothing better comes to mind > at the moment. > > Cheers > > -- > Pat > > On 22/12/2010, at 2:18 PM, jennyw wrote: > > > Hi, everyone! Kind of new to Sphinx and Thinking Sphinx. Seems to be > > pretty great so far, though! I do have a question about > > aggregation ... For example, let's say you're creating a blog > > application and would like people to be able to search on posts. Since > > there are often insightful comments, you want the search to return > > posts whose comments match the search term, even if the posts don't. > > And you wan to highlight the search terms. The thing that's come to > > mind is to define an index like so: > > > > class Post < ActiveRecord::Base > > define_index do > > indexes subject > > indexes body > > indexes comments(:body), :as => comments_text > > end > > end > > > > Which would let us include the comments in the Post. Is there a better > > way? Such as indexing body on comments and somehow combining them in a > > query? I suspect not, but thought I'd ask. Also, I suspect that if a > > post has many long comments, we might run into some size issues > > (currently setting group_concat_max_len to 1 MB). > > > > Also, if you wanted to highlight found search terms, then ... I > > suppose there are several ways, but none of the ones I've come up with > > sound great. The simplest one (and possibly the least performant) > > would be to index body on comments and run the search against each of > > those to be able to get excerpts. Any better ideas? > > > > Thanks! > > > > -- > > 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]<thinking-sphinx%[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]<thinking-sphinx%[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.
