← Blog · Home · Getting Started

From Weaviate to the Index Server

September 2026 · 7 min read

Weaviate is a genuinely capable open-source vector database — hybrid search, a module ecosystem, and a GraphQL-first API. It's a fair choice, and this isn't a takedown. It's for the teams who've concluded they'd rather drive vector, keyword, and hybrid search over the OpenSearch REST API that the rest of their stack already speaks — with faster hybrid latency, higher ingest, and aggregations/facets in the same engine — and want to know what moving looks like and where Weaviate still wins.

The real difference: the API and the surface

Both engines do server-side hybrid (BM25 + vector). The day-to-day difference is what you write and what else the engine gives you:

WeaviateIndex Server
Primary APIGraphQL (plus REST/gRPC)OpenSearch 3.5 REST — opensearch-py/-java connect unchanged
Hybrid queryGraphQL hybrid(query, vector, fusionType)one query-DSL clause {"hybrid":{"queries":[…]}}
Full-text + facetsBM25 + filtersBM25 + aggregations, facets, geo, `_cat`/`_count`/scroll — a full search server
Elasticsearch clients—compat.flavor=elasticsearch presents as ES 8.x

If your application (or platform — SearchBlox SearchAI 12.2 runs on it in production) already speaks OpenSearch, "adding vectors" stops being a second system with a second query language and becomes a mapping change plus a neural or hybrid clause.

The numbers (and where Weaviate wins)

From our published Graviton benchmarks (20k × 384-dim + a 20k text+vector hybrid corpus, engines run one at a time on a c8g.4xlarge):

metricSearchAI 1.3.0Weaviate
hybrid k=10 p50 (ms)3.707.58
vector ingest (docs/s)4,3832,063
kNN k=10 p50 (ms)3.198.30
filtered kNN p50 (ms)3.034.86
recall@101.00 (low ef)0.99 (ef≈1024)
server RSS (MB)527282

Honest scorecard: SearchAI answers hybrid queries ~2× faster, ingests ~2× faster, reaches full recall at a much lower ef, and adds the whole full-text/aggregation surface — but Weaviate is the lighter process (282 MB vs 527 MB here) and brings a mature module ecosystem (generative, reranker, and multi-modal modules) and a GraphQL model some teams prefer. If those modules or GraphQL are central to your app, that's a real reason to stay.

Migrating

There's no Weaviate wire-dialect here (Weaviate is GraphQL-native), so the move is a data import plus adopting the OpenSearch API — both are straightforward:

PUT /docs
{ "mappings": { "properties": {
  "body": { "type": "text" },
  "embedding": { "type": "knn_vector", "dimension": 1024,
                 "embed": { "source_field": "body", "model": "your-embed-model" } }
}}}

# hybrid, one clause — the server embeds the query text itself
POST /docs/_search
{ "query": { "hybrid": { "queries": [
    { "match": { "body": "export invoices" } },
    { "neural": { "embedding": { "query_text": "invoice export error", "k": 20 } } }
] } } }

Prove it before you commit

The console's Evaluate tab holds golden query sets and can replay them against the index server (and a baseline) with overlap@10, top-1 agreement, NDCG@10 and per-side latency — so "same results, faster" is a measurement, not a claim.

One line installs the server and inference engine:

curl -fsSL https://index-server.searchblox.com/install | sudo bash

Start with the Getting Started guide or a build from the downloads page; the full comparison and honest edges are on the benchmarks page.