Request
In SchemaSearcher.cpp, the search(...) method currently generates query interpretations on every call. If the schema is the same, then all interpretations of a query will be the same, so this is very inefficient. However, if the schema changes, the interpretations must be generated from scratch.
Possible implementation
Cache the query interpretations per schema. Then, check if the current schema's interpretations are cached, if so avoid regenerating them and just use the cache.