Solr Indexer
Configuration reference for the Solr Indexer — single-node and SolrCloud.
For conceptual documentation — what an Indexer is, why batching matters, deletion as a design pattern, and error handling at the batch level — see Architecture: Indexer.
indexer ConfigurationIndexer configuration has two parts: the generic indexer block (common to all backends), and a backend-specific config block (e.g., solr, opensearch, elastic, csv).
indexer {
type: "Solr"
batchSize: 100
batchTimeout: 100
blacklist: ["internal_field"]
}
solr {
url: "http://localhost:8983/solr/my-collection"
}
indexer.type is shorthand for a built-in indexer: "Solr", "OpenSearch", "Elasticsearch", or "CSV". For plugin indexers, use indexer.class with the fully qualified class name instead.
| Parameter | Type | Default | Description |
|---|---|---|---|
type | String | — | Shorthand for built-in indexers: Solr, OpenSearch, Elasticsearch, CSV. |
class | String | — | Fully qualified class name for plugin or custom indexers. |
batchSize | Integer | 100 | Number of documents to accumulate before sending a batch. |
batchByteSize | Long | — (disabled) | Estimated cumulative byte size of documents in a batch before flushing. The size is approximated by traversing the document’s JSON structure, not by measuring exact serialized bytes. When set alone, document-count batching is disabled. When set alongside batchSize, whichever limit is reached first triggers a flush. |
batchTimeout | Integer (ms) | 100 | Milliseconds since last add or flush before the batch is sent regardless of size. |
idOverrideField | String | — | Document field whose value is used as the ID sent to the destination (instead of id). |
indexOverrideField | String | — | Document field whose value determines the target index/collection. Triggers per-index batching. Not supported by OpenSearch or Elasticsearch indexers. |
whitelist | List<String> | — | Only these fields are sent to the destination. Fields on the blacklist are still excluded. |
blacklist | List<String> | — | These fields are never sent to the destination. |
sendEnabled | Boolean | true | Set to false to disable actual indexing (useful for testing or pipeline validation). |
deletionMarkerField | String | — | Field name that marks a document as a deletion request. |
deletionMarkerFieldValue | String | — | Value in deletionMarkerField that triggers a deletion. Both must be set together. |
deleteByFieldField | String | — | Field name containing the index field to use in a delete-by-query operation. |
deleteByFieldValue | String | — | Field name containing the value to match in a delete-by-query operation. Both must be set together. |
maxRetries | Integer | — (disabled) | Maximum retry attempts for a failed batch. Must be > 0 when set. Omit to disable retries entirely. |
retryWaitDurationMs | Integer (ms) | 1000 | Initial wait duration before the first retry. Subsequent retries use exponential backoff. Requires maxRetries. |
retryMaxWaitDurationMs | Long (ms) | 30000 | Maximum wait duration between retries (caps the exponential backoff). Requires maxRetries. |
retryRandomizationFactor | Double | 0.5 | Jitter factor applied to wait duration. 0.5 means actual wait is 50%–150% of computed backoff. Set to 0.0 to disable jitter. Requires maxRetries. |
retryableStatusCodes | List<Integer> | [429, 503, -1] | HTTP status codes that trigger a retry. -1 means “no status code available” (e.g., network timeout). An empty list is invalid. Requires maxRetries. |
versionType | String | — | Versioning strategy for indexed documents. Enables optimistic concurrency control. Backend-specific support varies (for example, OpenSearch accepts external or external_gte). |
versionField | String | — | Document field containing a numeric version value. Used instead of the Kafka offset when set. Requires versionType. |
routingField | String | — | Document field whose value is used as the _routing parameter in index requests. |
Whitelist and blacklist are applied at indexing time, not during pipeline processing. Stages see all fields on a document; only the Indexer strips fields before sending to the backend. Reserved internal fields (___dropped, ___skipped, ___children) are always stripped.
When indexOverrideField is set, the Indexer uses a MultiBatch — maintaining a separate batch per distinct field value and flushing each independently when it reaches batchSize or batchTimeout.
Two distinct deletion mechanisms are available:
Delete by ID: Set deletionMarkerField and deletionMarkerFieldValue. When a document has the marker field set to the marker value, the Indexer issues a delete-by-ID against the search backend for that document’s ID.
Delete by query: Also set deleteByFieldField and deleteByFieldValue. When a document has all four deletion fields set, the Indexer issues a delete-by-query: it deletes all documents in the index where deleteByFieldField’s referenced field equals the value in deleteByFieldValue’s referenced field.
indexer {
type: "Solr"
deletionMarkerField: "file_expired"
deletionMarkerFieldValue: "true"
deleteByFieldField: "delete_by_field"
deleteByFieldValue: "delete_by_value"
}
Documents accumulate in a batch and are flushed when any of these conditions is met:
batchSize documents (default: 100).batchByteSize bytes of accumulated document payload (disabled by default).batchTimeout milliseconds have elapsed since the last document was added or the last flush (default: 100ms).When only batchByteSize is set (without batchSize), document-count batching is effectively disabled — batches flush purely on payload size. When both are set, whichever limit is reached first triggers the flush. This is useful for backends with request-size limits (e.g., a 10 MB bulk API limit) where a fixed document count may produce unpredictably sized payloads.
The timeout flush ensures documents are not left waiting indefinitely in low-volume scenarios.
Batch-level vs. per-document failures: A bulk-API failure that rejects the entire request fails all documents in the batch. Individual document rejections in the response (e.g., mapping errors) fail only those specific documents — the rest succeed. Both cases are tracked separately in the run summary.
Configuration reference for the Solr Indexer — single-node and SolrCloud.
Configuration reference for the OpenSearch Indexer.
Configuration reference for the Elasticsearch Indexer, including join field support.
Configuration reference for the CSV Indexer — write pipeline output to a CSV file.
A no-op indexer that discards all documents — useful for testing pipelines.
Configuration reference for the Pinecone Indexer — index vector embeddings into Pinecone.
Configuration reference for the Weaviate Indexer — index documents and vectors into Weaviate.