Free to use · OpenSearch 3.5-compatible

A private search engine
you own.

Index Server is a self-hosted, OpenSearch 3.5-compatible search + vector engine — full-text, kNN and hybrid search, aggregations and facets, with native snapshots. It's a drop-in replacement for OpenSearch/Elasticsearch: existing clients connect unchanged, and it runs in production as the OpenSearch replacement under SearchBlox SearchAI 12.2. No data egress. No metered billing. Fixed-cost scaling.

Linux x86_64 · arm64 Full-text + vector + hybrid Drop-in for OpenSearch/ES
root@host — install
$ curl -fsSL https://index-server.searchblox.com/install | sudo bash unpacking searchai-index-server + engine installing systemd service … searchai-index ✓ service started on :9200 $ curl http://<host>:9200/ {"version":{"number":"3.5.0","distribution":"opensearch"}, …} $ curl http://<host>:9200/health {"status":"green"}
Point opensearch-py, opensearch-java or SearchBlox at it — same endpoint, same DSL, your infrastructure.
0
bytes of your data leaving the network
3.5
OpenSearch API version it speaks
5
vector-DB dialects (Qdrant, Pinecone, Chroma, Algolia, ES-8)
Free
to download and run — support plans optional

Install in 30 seconds

A Linux host (Ubuntu 22.04+, Debian 12+, Amazon Linux 2023, RHEL 9+ — x86_64 or arm64) with sudo. Testing on Mac or Windows? Use Docker. Full steps in the Getting Started guide and the downloads page.

Linux · systemd service
curl -fsSL https://index-server.searchblox.com/install | sudo bash
Unpacks the self-contained bundle (server binary + embedded engine + config), installs and starts a systemd service on port 9200, and waits for /health. Then point any OpenSearch client at http://<host>:9200.

Set an API key on any internet-facing deployment — edit server.api-key in conf/server.properties (an admin key, plus optional scoped per-index keys) and front the port with a gateway. See production readiness.

One engine, the whole search stack

Everything is served from the OpenSearch REST API on http://<host>:9200. Existing OpenSearch/Elasticsearch clients work unchanged.

_search
Full-text search
BM25 full-text with the match / match_phrase / multi_match / query_string / simple_query_string family, plus term, terms, range, exists, prefix, wildcard, regexp, fuzzy and bool filters pushed down to the engine.
knn
Vector & kNN search
Dense-vector kNN (score-normalized per space_type), script_score knn_score in the SearchBlox RAG shape, and filtered vector search — HNSW/IVF/DiskANN indexes from the embedded vector engine.
hybrid
Hybrid search (RRF)
Native hybrid queries fuse full-text and vector results with Reciprocal Rank Fusion in the engine — the complete keyword + semantic pipeline behind one query.
aggs
Aggregations & facets
terms, metrics (avg/sum/min/max/stats/extended_stats/percentiles/cardinality), date_histogram, auto_date_histogram, range & date_range, filter/filters, nested, top_hits, multi_terms — the facets SearchBlox renders.
_snapshot
Native snapshots
Built-in OpenSearch-compatible _snapshot filesystem repository API: snapshot all or selected indices point-in-time-consistently while the server stays live, then restore into a fresh index.
dialects
Multi-dialect adapters
Optional data-plane adapters for Qdrant, Pinecone, Chroma and Algolia, plus an Elasticsearch 8.x presentation flavor — the same engine and data behind each on its own listener.
MCP
MCP for AI agents
An optional Model Context Protocol listener lets Claude and other agents drive the engine as tools — create indices, load documents, and run full-text, vector and hybrid search over Streamable HTTP, authenticated with your API key. Details →
security
Auth & TLS
API-key auth with an admin key plus scoped, per-index keys (read / write / admin roles), in-process TLS on all listeners, and encrypted inter-node cluster traffic.
ops
Ops-friendly
Stateless-node-behind-a-round-robin-LB model with a /health probe, _cat/indices, _stats, _cluster/health, and a self-contained data directory. Same conf/server.properties conventions as the Inference Server.
private
Yours, end to end
Runs entirely inside your network — on-prem, air-gapped, regulated or edge. No data leaves the box, no per-document billing; scale is fixed-cost on hardware you own.

Compatibility at a glance

Full compatibility matrix →

Surface
Speaks
Clients
Notes
OpenSearchREST API 3.5
query + agg DSL
opensearch-py / -java, RHLC
Default flavor; connect unchanged
Elasticsearch8.x flavor
handshake + dense_vector + knn
elasticsearch-py / -java 8.x
Set compat.flavor=elasticsearch
Qdrantdata-plane adapter
collections, points, query
Qdrant clients
Subset — control-plane rejected cleanly
Pineconedata-plane adapter
upsert, query, fetch, stats
Pinecone clients
Subset — index create/list rejected
Chromav2 API adapter
collections, add, query, get
Chroma clients
Data-plane subset
Algoliadata-plane adapter
batch, query, facets, filters
Algolia clients
Rules / synonyms rejected cleanly

Adapters are versioned compatibility adapters — a deliberate subset (indexing + query) of each vendor's surface. Ranking/relevance is BM25/RRF, not each vendor's native model. See the dialect matrix.

From zero to searching in five steps

1
Run the install command
Unpacks the bundle, installs a systemd service and waits for /health. Restarts on reboot.
2
Verify the handshake
curl http://<host>:9200/ — returns the OpenSearch 3.5 version envelope.
3
Create an index
PUT an index with your mappings — text, keyword, numeric, date, and knn_vector fields.
4
Index documents
Use _doc or _bulk — the same body OpenSearch expects.
5
Search
POST _search with the OpenSearch DSL — full-text, kNN, hybrid, plus aggregations. Grow with cluster nodes or point SearchBlox at it.
python · opensearch-py
from opensearchpy import OpenSearch client = OpenSearch( hosts=[{"host": "<host>", "port": 9200}], http_auth=("admin", "YOUR_API_KEY"), use_ssl=False, ) client.index(index="docs", body={"title": "hello", "body": "world"}) client.indices.refresh(index="docs") resp = client.search(index="docs", body={ "query": {"match": {"body": "world"}} }) print(resp["hits"]["total"])
Same client, same DSL — only the hosts point at your own server.

Powering SearchBlox — and yours to run

The Index Server is the search backend SearchBlox points at on :9200 over TLS. Run the same private engine yourself, or talk to us about the full SearchAI platform — enterprise search, RAG, hybrid + vector search, and commercial support on top of it.