Schema for handling email:

  Indexed not Stored (Field.UnStored)
    Body
  Indexed and Stored (Field.Text)
    Subject
    Message-ID
    Author
    Recipients
    Date
  Stored but not Indexed (Field.UnIndexed)
    File location


For the common use case ("print out the email that matches these
critera") this means the code goes to Lucene to do the lookup,
retrieves file locations, then goes to the original files to get the
messages. The advantage is that there's less data in the indices (not
the full body, and not most headers), and we never get involved in
reformatting messages - original data is returned. Metadata (subjects,
sender, etc) is stored for fast retrieval when you don't want to
retrieve the whole message.


The actual user interface will be simple and Unix pipe oriented.
  index *.mbox
  query "Wheetabix" | less
  query -a "Nelson" -s "yummy cereal" -b "Wheetabix" | less

I'm going to do my best to avoid complicated options, although I can
definitely see wanting to support multiple sort criteria (relevance,
date) on query.
