Skip to main content
Version: 0.12.0

Index-free search

Index-free search lets you query data in place — without first ingesting, indexing, or copying it into Lucenia. You point Lucenia at an existing file, and it exposes that file as a read-only index that answers the normal search, aggregation, and GET APIs. The file remains the source of truth; the index is a thin, read-only view over it.

important

This is an experimental feature and is not recommended for use in a production environment. For updates on its progress, see the Lucenia version history.

This is useful when you want to:

  • Inspect data before committing to ingest. Explore a dataset with real queries, confirm its schema, and check data quality before deciding whether — and how — to index it for good.
  • Query cold or archival data occasionally. Run the occasional search or aggregation over data sitting in object storage without standing up an ingest pipeline for it.
  • Keep the original file authoritative. The mounted index never mutates the file, and deleting the index never touches it.

When you decide the data is worth keeping, you promote it to a regular index with a standard _reindex — no special API — which gives it full indexing (Lucene points, keyword field data, aggregations, and sort) that the read-only view intentionally does not provide.

Supported sources

SourceDescription
Parquet filesMount a Parquet file (local, or from object storage such as Amazon S3 or HDFS) as a read-only index and query it with a custom Lucene codec.

How it works

Index-free search is implemented as a custom Lucene codec rather than an ingest pipeline or a separate query engine. The codec reads the source file's data pages directly at query time and maps its physical layout onto Lucene's read APIs, so a mounted file behaves like an ordinary — if read-only — index. For Parquet, the mapping is:

  • One row → one document (docID = row index)
  • One column → one field
  • One file → one segment → one shard

Because the source file is the segment, a mounted index is single-shard and read-only. See Query Parquet files for the full workflow, the field-type mapping, the supported query surface, and its limitations.

Promoting to a regular index

A mounted index supports a deliberately limited query surface (for Parquet, doc-values range and term/_id queries, plus numeric aggregations). To unlock the full query and aggregation surface, reindex it into a normal index:

POST /_reindex
{
"source": { "index": "mtcars" },
"dest": { "index": "mtcars_ingested" }
}

The destination is a standard index with its own mapping and full indexing. You can then delete the mounted index; deleting it never affects the underlying file. See Reindex data for reindex options.