I agree that having only one result for a thread is better.
I had a closer look and I think the problem is in the search::datasource implementation. The combined content of all messages of the thread should be indexed but the query to retrieve it is not correct:
    <fullquery name="callback::search::datasource::impl::forums_message.messages">
      <querytext>
        select subject, content, format
        from forums_messages
        where message_id=:message_id
-- lets just get the message instead of the whole thread
-- replace with a connect by
      </querytext>
    </fullquery>
Thanks Dave. I'll fix that and try again.