I need to provide some logic in some of the related classes to ensure referential integrity so that when a relation C of relation B to class A is changed and relation B has methods using relation C that are indexed in Class A, class A re-indexes the appropriate relation (B), which will return new values based on an updated relation C. The same applies to deletions.
Other than that I think I have it working quite nicely, despite some hacky methods in some classes to get around the limitation of indexed class only supporting indexing of direct relations and not relations of relations.
Yes, it is sounds a little complex, but my goal is for searching to give the results that users are looking for, given that all the indexing despite its complexity still generates a plain old (well normalised, and linked to a metadata table) reverse index, the searching will be as fast or faster than the lame single table, hardcoded columns fulltext searching that many websites use. My searching provides fulltext/keyword searching accross tables and even objects. The results are infinitely better.
The only improvement I can think of is integrating a part-of-speach tagger that will provide some limited phrase matching (transparently to the user).