Ferret search results breakdown

Hi, I'm building an application that is going to be making heavy use
of all the ferret search options, i.e. boolean, proximity, etc. I was
wondering if ferret has a way of providing a full search report, for
example, for each document hit give the terms that were found in that
document and how many times each was hit.

Thanks!

The Index#explain method is probably what you want;

http://ferret.davebalmain.com/api/classes/Ferret/Index/Index.html#M000038

Although the output may be a bit hard to understand. If you want to
create your own reports, here is an example;

  require 'rubygems'
  require 'ferret'

  class Ferret::I
    def report(query, doc_num)
      return '' unless query = process_query(query)
      report = ''
      term_vectors = reader.term_vectors(doc_num)
      query.terms(searcher).each do |term|
        term_vector = term_vectors[term.field].terms.select {|tp|
tp.text == term.text}
        count = term_vector.size > 0 ? term_vector.first.positions.size : 0
        report << "#{term.field}:#{term.text} - occured #{count} times\n"
      end
      report
    end
  end

  i = Ferret::I.new(:analyzer => Ferret::Analysis::WhiteSpaceAnalyzer.new)

  i << {
    :one => """Hi, I'm building an application that is going to be
making heavy use
  of all the ferret search options, i.e. boolean, proximity, etc. I was
  wondering if ferret has a way of providing a full search report, for
  example, for each document hit give the terms that were found in that
  document and how many times each was hit.""",
    :two => """Where lipstick is concerned, the important thing is not color,
  but to accept God's final word on where your lips end. - Jerry Seinfeld""",
    :three => """The forceps of our minds are clumsy forceps, and crush the
  truth a little in taking hold of it. - HG Wells"""
  }

  puts "Explain => "
  puts i.explain('the building all', 0)
  puts ""
  puts "Report => "
  puts i.report('the building all', 0)