This strategy is adopted because the majority of the Lucene classes are not serializable,
so a workaround is used: we only serialize the information needed to rebuild.
This includes the class names for the Analyzer/QueryConstructor, which must have a
single arg constructor, taking the config as the parameter, and a getConfig() method.
The constructor will be invoked on deserialization, and must rebuild it from scratch.
The getConfig() will be invoked on serialization, and must save in the returned config
al