# File lib/sup/ferret_index.rb, line 160
  def each_id_by_date query={}
    return if empty? # otherwise ferret barfs ###TODO: remove this once my ferret patch is accepted
    ferret_query = build_ferret_query query
    offset = 0
    while true
      limit = (query[:limit])? [EACH_BY_DATE_NUM, query[:limit] - offset].min : EACH_BY_DATE_NUM
      results = @index_mutex.synchronize { @index.search ferret_query, :sort => "date DESC", :limit => limit, :offset => offset }
      debug "got #{results.total_hits} results for query (offset #{offset}) #{ferret_query.inspect}"
      results.hits.each do |hit|
        yield @index_mutex.synchronize { @index[hit.doc][:message_id] }, lambda { build_message hit.doc }
      end
      break if query[:limit] and offset >= query[:limit] - limit
      break if offset >= results.total_hits - limit
      offset += limit
    end
  end