IndexReader is an abstract class, providing an interface for accessing an
index. Search of an index is done entirely through this abstract interface, so
that any subclass which implements it is searchable.
Concrete subclasses of IndexReader are usually constructed with a call to the
static method open.
For efficiency, in this API documents are often referred to via document
numbers, non-negative integers which each name a unique document in the index.
These document numbers are ephemeralthey may change as documents are added to
and deleted from an index. Clients should thus not rely on a given document
having the same number between sessions.