Split internal metadata into two: agnostic metadata and indexing service specific metadata

Description

We want to make it as easy as possible for users to switch between indexing services (Lucene, Elasticsearch).

To that end, we would isolate as much as possible the mapping from the indexing services specifics.
This means in particular that field bridges would no longer give access to Lucene-specific features (such as SortedDocValuesFields), but would only serve the purpose of transforming the data from the entity model to a generic document model. Then we'd have another layer (maybe customizable) that would transform the data from the generic document model to a document model that would be specific to an indexing

So we'd have:

Entity ====[Field bridge]===> Generic Document ====[Indexing service specific bridge]===> Indexing service specific document

Note that the indexing service specific bridge might only be a standard, non-customizable singleton (on contrary to field bridges): this is yet to be determined.

We'd likely require a reverse process when extracting query results:

Entity <====[Field bridge]=== Generic Document <====[Indexing service specific bridge]=== Indexing service specific document

See for discussions about this "FieldBridge 2.0" API.

The purpose of this ticket is to discuss required changes to the metadata. Indeed, to support this process, we'd need metadata about the generic document model: which fields are supposed to be sortable, what are their types, their expected formats (for dates in particular), etc., so that the indexing service specific bridge would know how to interpret the generic document.
Before starting the actual work, we'll probably need to enumerate the required metadata.

Environment

None

Status

Assignee

Yoann Rodière

Reporter

Yoann Rodière

Labels

None

Suitable for new contributors

None

Pull Request

None

Feedback Requested

None

Components

Fix versions

Priority

Critical