Greets,

The two Lucy classes we can expect will be used most often are the
single-machine searcher and the single-machine indexer.  Close behind them
will be Schema, the document class and the query parser.  

Huffman coding naming principles dictate that classes whose names are typed
most often should have the shortest names.  Therefore, instead of locating
common classes within sub-trees, we should locate them at the first level --
directly underneath Lucy.

   Lucy::Searcher
   Lucy::Indexer
   Lucy::Schema
   Lucy::Doc
   Lucy::QueryParser

Schema, Doc, QueryParser, and probably Indexer will all descend from Lucy::Obj.
Searcher, however, will descend from the abstract base class Searchable, which
definitely belongs under Lucy::Search.

   Lucy::Search::Searchable

Java Lucene is divided up into multiple Java packages.  Theoretically, this
enforces a certain discipline, but in practice, the "search", "index",
"analysis", etc. packages are never distributed separately.

In contrast, core Lucy should be conceived of as a single bundle of files.
This gives us the freedom to apply hacks and band-aids which reach across
sub-trees if need be.  It also makes sense, if we see "Lucy" as a single
entity, for Lucy::Searcher to subclass Lucy::Search::Searchable, whereas that
would not really be appropriate if "Lucy::Search" was an atomic unit.

Marvin Humphrey

Reply via email to