SearchIndex is the base index class. Each connector will provide a subclass of this that provides search engine specific behavior.

This class is responsible for:

- Taking index calls adding classes and fields, and resolving those to value sources and types

- Determining which records in this index need updating when a DataObject is changed

- Providing utilities to the connector indexes

The connector indexes are responsible for

- Mapping types to index configuration

- Adding and removing items to index

- Parsing and converting SearchQueries into a form the engine will understand, and executing those queries

The user indexes are responsible for

- Specifying which classes and fields this index contains

- Specifying update rules that are not extractable from metadata (because the values come from functions for instance)