You are viewing documentation for an older version of Lucille.

This is a static snapshot.
For up-to-date information, see the latest version.

Indexers

Configuration reference for built-in and plugin indexers shipped with Lucille.

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.

Generic indexer Configuration

Indexer 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.

Generic Parameters

ParameterTypeDefaultDescription
typeStringShorthand for built-in indexers: Solr, OpenSearch, Elasticsearch, CSV.
classStringFully qualified class name for plugin or custom indexers.
batchSizeInteger100Number of documents to accumulate before sending a batch.
batchByteSizeLong— (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.
batchTimeoutInteger (ms)100Milliseconds since last add or flush before the batch is sent regardless of size.
idOverrideFieldStringDocument field whose value is used as the ID sent to the destination (instead of id).
indexOverrideFieldStringDocument field whose value determines the target index/collection. Triggers per-index batching. Not supported by OpenSearch or Elasticsearch indexers.
whitelistList<String>Only these fields are sent to the destination. Fields on the blacklist are still excluded.
blacklistList<String>These fields are never sent to the destination.
sendEnabledBooleantrueSet to false to disable actual indexing (useful for testing or pipeline validation).
deletionMarkerFieldStringField name that marks a document as a deletion request.
deletionMarkerFieldValueStringValue in deletionMarkerField that triggers a deletion. Both must be set together.
deleteByFieldFieldStringField name containing the index field to use in a delete-by-query operation.
deleteByFieldValueStringField name containing the value to match in a delete-by-query operation. Both must be set together.
maxRetriesInteger— (disabled)Maximum retry attempts for a failed batch. Must be > 0 when set. Omit to disable retries entirely.
retryWaitDurationMsInteger (ms)1000Initial wait duration before the first retry. Subsequent retries use exponential backoff. Requires maxRetries.
retryMaxWaitDurationMsLong (ms)30000Maximum wait duration between retries (caps the exponential backoff). Requires maxRetries.
retryRandomizationFactorDouble0.5Jitter 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.
retryableStatusCodesList<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.
versionTypeStringVersioning strategy for indexed documents. Enables optimistic concurrency control. Backend-specific support varies (for example, OpenSearch accepts external or external_gte).
versionFieldStringDocument field containing a numeric version value. Used instead of the Kafka offset when set. Requires versionType.
routingFieldStringDocument field whose value is used as the _routing parameter in index requests.

Field Filtering

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.

Deletion Mechanics

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"
}

Batching Behavior

Documents accumulate in a batch and are flushed when any of these conditions is met:

  • The batch reaches batchSize documents (default: 100).
  • The batch reaches 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.


Indexer Catalogue

Core Indexers

Plugin Indexers


Solr Indexer

Configuration reference for the Solr Indexer — single-node and SolrCloud.

OpenSearch Indexer

Configuration reference for the OpenSearch Indexer.

Elasticsearch Indexer

Configuration reference for the Elasticsearch Indexer, including join field support.

CSV Indexer

Configuration reference for the CSV Indexer — write pipeline output to a CSV file.

NopIndexer (No-op)

A no-op indexer that discards all documents — useful for testing pipelines.

Pinecone Indexer

Configuration reference for the Pinecone Indexer — index vector embeddings into Pinecone.

Weaviate Indexer

Configuration reference for the Weaviate Indexer — index documents and vectors into Weaviate.