Turn any website into AI search with a RAG API in 60 seconds. Real Solr index, real vectors, real hybrid search — live, right now.

No signup. No Docker. No OpenAI key. No 200 lines of Java. Click the button, push your data (or ours), and search it with hybrid BM25 + kNN — then open the actual Solr index and see the 1024-dimension vectors sitting in the documents.

Go ahead — try it live Your sandbox index self-destructs after 3 days.

A typical "RAG made easy" tutorial

  • Install Java 17 + Maven or Python + a framework
  • Run the search engine yourself in Docker
  • Bring a paid OpenAI key for embeddings
  • Write chunking, embedding and query code
  • An afternoon later: it answers one question

This page

  • Click one button — a managed Solr index is created for you
  • Paste JSON or a document URL — we chunk, embed, enrich
  • Search it hybrid, with AI Hints answering from your data
  • Browse the raw Solr index and see the vectors yourself
  • 60 seconds later: it answers, with citations

Ask in any language. The index does not have to speak it.

The embedding model is multilingual, so meaning crosses languages. These are live searches on real indexes — click them, change the query, judge for yourself. No signup, nothing staged.

Both indexes above are configured for their own language on the keyword side — English and Romanian. The multilingual model is what carries a query across that boundary, which is exactly why we fuse keyword and vector scoring instead of choosing one. Your sandbox index below behaves the same way: push documents in any language and query them in any other.

The three queries, exactly as they run

Same index, same question, three different retrievals. Copy them, point them at your own Solr, they work.

1. Keyword only — BM25, no vectors

A plain edismax query. Field boosts decide that a hit in the title counts more than one buried in the body.

GET /solr/<index>/select
  q   = {!edismax qf="title^3 description^2 text" v=$uq}
  uq  = your query text
  rows= 5
  fl  = title,uri,score
The query text goes through v=$uq rather than straight into q. If user input starts with {!...} it can otherwise select a different query parser, and input must never choose the parser.

2. Vector only — pure kNN, no keywords

First the question becomes a vector, server side. Then that vector is the query. No word from your question is ever compared to any word in the documents.

POST /solr_manager/api/embed
  email, api_key, index_name, payload = your query text
  → 1024 floats

POST /solr/<index>/select        (POST, not GET)
  q  = {!knn f=embeddings topK=5}[0.0449,0.0160,-0.0324, ... ]
  fl = title,uri,score
POST is not optional here: a 1024 dimension vector is roughly 10 KB of text and will not survive a URL.

3. Hybrid — what we actually serve

One query. The lexical side and the vector side are built as sub queries and fused per document inside our {!hybrid} parser, rather than being run twice and merged afterwards.

GET /solr/<index>/select
  lexicalRaw  = {!edismax qf="title^0.1 description^0.05 uri^0.01 text^0.01" mm="2<65% 4<50% 8<40%"}your query
  vectorQuery = {!knn f=embeddings topK=500}[ ... 1024 floats ... ]
  q           = {!hybrid lexical=$lexicalRaw vector=$vectorQuery mode=union alpha=0.8 topN=500}

alpha is the balance between the two legs, topN the candidate depth, mode whether a document needs both legs or either. All three are per index settings under Search Tuning, changeable without reindexing.

Why the columns are three queries and not one with the weights moved

Because fusion happens per document. Setting a weight to zero changes how much that leg contributes to the score, but the other leg still decides which documents became candidates in the first place, so you get the same list back with different numbers on it. Isolation has to happen at retrieval.

What happens when you press Ask

Four calls, no framework, no orchestration library. This is the whole RAG loop.

1. Retrieve — hybrid search over your index

The question runs through the same hybrid retrieval as the search page, and we keep the top four.

GET /solr_manager/api/embed_and_search
  email, api_key, index_name
  q     = the question
  rows  = 4
  fresh = no
fresh=no matters. The default applies a freshness filter of roughly creation_date:[NOW-7D TO NOW], which returns nothing for documents you pushed without a recent timestamp.

2. Build the context

From the top three documents: title, description, and the first 50 sentences of the body, preferring text_t (the structured JSON-LD text) over raw text because it carries less navigation and boilerplate.

DOCUMENT 1: <title>
<description>
<first 50 sentences of text_t or text>

DOCUMENT 2: ...
DOCUMENT 3: ...

LINKS:
- [title](uri)
- [title](uri)

The links are appended in markdown so the model can cite them inline instead of inventing a reference.

This is the step that decides answer quality, more than the model does. Feed a page's first few sentences and you hand the LLM a navigation bar, then wonder why the answer is generic. We learned that the hard way on this very page.

3. Generate — streamed, grounded in that context

POST /solr_manager/api/ai_summary
  email, api_key, index_name
  query       = the question
  context     = the block above
  instruction = answer only from the context, cite the markdown links,
                say so plainly if the answer is not there
  stream      = true

Passing context explicitly is deliberate. Called without it, the endpoint answers from the model's own knowledge, which is exactly what grounding is supposed to prevent.

4. Stream back

The first line of the response is META:{"sources":[...]}, so the page can render the source pills immediately, then every byte after it is the answer as the model produces it.

Doing this yourself

Two HTTP calls against documented endpoints, with your own API key: API reference. The same pipeline is wrapped for you in the LangChain, LlamaIndex and Haystack packages.

What actually happens under the hood

When you click the button below, a real Apache Solr 9.6 index is provisioned on our managed Solr cloud with the full web-crawler schema: dense vector field (1024-dim multilingual E5), {!hybrid} query parser fusing BM25 with kNN, autocomplete, spellcheck, sentiment, language detection. Every document you push through the Data Ingestion API is embedded server-side on our GPUs — you never generate a vector yourself. The search page you get includes AI Hints and the Document Reader: RAG answers with citations, generated from your own indexed content.

The exact same engine already powers our integrations — pick your stack and the setup is one install away:

Try it live

One click creates your own ephemeral index on fi.solrcluster.com. Everything below is real — real API, real Solr, real vectors.

Comes pre-loaded with 50 sample documents, so it is searchable immediately · Limit: 2 indexes per hour per visitor · index lives 3 days, then deletes itself · powered by the account sandbox@opensolr.com

See it live — nothing to set up

No setup at all: the second button opens an index that is already crawled and embedded, with example questions ready to run.

  • Creating Solr index on fi.solrcluster.com
  • Applying vector schema + {!hybrid} config set
  • Making embeddings visible (stored=true)
  • Generating your Solr credentials
  • Loading 50 sample documents so it is searchable right away

Your sandbox — everything is real, click and check

Keep this link — it is the only way back to this sandbox
Browse the raw Solr index Open Solr Admin UI Open your search page

Clearing empties the index but keeps it, along with its credentials and this link. Use it before crawling your own site or pasting your own JSON, so the seeded news articles do not get mixed into your results and skew what you are testing.

The Solr Admin UI and raw index URL will ask for the username / password above — that is your own private HTTP auth on this index. After you ingest, look at any document: the embeddings field holds the real 1024-dimension vector.

Push some data

Your index already arrived with 50 of these. Click for another fresh batch from the same live news index, and watch the queue do its thing.

A JSON array of documents — uri, title, description, text required, up to 50 per batch. Any dynamic field welcome.

Give us your website — a homepage or a sitemap.xml URL — and our Web Crawler registers it on this index, verifies it automatically and starts crawling right away. Same flow the Drupal and WordPress modules use. Sandbox limit: 100 pages, single thread, one-off run (no schedule).

0
Pages crawled
0
Queued to crawl
Crawler state
0
Documents in index

Prefer your own terminal? This is a real, working command with your credentials — paste it as-is:


          

Watch the ingestion queue

Each batch is queued, then enriched: GPU embeddings, sentiment, language detection, autocomplete fields — all automatic. This table refreshes itself every few seconds — no page reload needed (and your sandbox survives a reload anyway: it is saved in this browser, and in the shareable link above).

JobStateProgressOKFailed
No jobs yet — push some data above.

Your index, live

Documents indexed
Disk used
0
Ingestion jobs
Until self-destruct

Step 1 — Ask your data (RAG, live)

Type a question. We hybrid-retrieve the most relevant documents from your index, hand them to the LLM as context, and stream the answer — with the source links cited inline. This is Retrieval-Augmented Generation, end to end, on the data you just pushed.

Try: how many people died in that flood in the mountains? · what did that woman think was a small problem with her eye? · what changes are coming to the money older people get every month?

Not sure what to ask? Your sandbox is seeded with 50 live news articles, and they are different every time one is created — so look at what is actually in yours before you search. Wait for the ingestion queue above to go quiet, then open the search page and hit search on an empty query: it lists everything in the index. Pick a document, then ask about it in your own words — words the article itself does not use. That is the whole trick.
Open the search page in a new window

Step 2 — Prove the hybrid is doing something

A fused score can hide a leg that contributes nothing. So run the same query three ways against your index and compare the result sets, not the marketing: keyword only (BM25, no vectors), vector only (pure kNN, no keywords), and the hybrid we actually serve. These are three separate Solr queries — not the same query with the weights nudged — and the difference is the whole point. With per-document fusion, zeroing a weight does not remove a leg: it only changes how much that leg contributes to the score, while the other leg still decides which documents become candidates at all. You get the same list back with different numbers on it, and you conclude the fusion works when you have proven nothing. Isolation has to happen at retrieval, which is why each column below is its own query against your index.

Try: people jailed for remembering a massacre · aircraft that wandered somewhere they were not allowed · now an exact term: IRGC

Not sure what to ask? Your sandbox is seeded with 50 live news articles, and they are different every time one is created — so look at what is actually in yours before you search here either. Wait for the ingestion queue above to go quiet, then open the search page and hit search on an empty query: it lists everything in the index. Pick a document, then ask about it in your own words — words the article itself does not use. That is the whole trick.
Open the search page in a new window
Keyword onlyBM25 · no vectors
    Vector onlykNN · no keywords
      Hybridwhat we serve

        Step 3 — Or use the full search page. Hybrid. With AI Hints.

        This is your hosted search page — the same one every Opensolr index gets, with AI Hints and the Document Reader built in. Try searching by meaning: describe what a document is about without using its words.

        What just happened behind the scenes

        Every step you clicked through is a plain API call you could have made yourself — nothing here is a mock:

        1. A real Apache Solr 9.6 index was created on our managed cloud — with the vector schema, the Opensolr {!hybrid} query parser (ours — it does not ship with Apache Solr) and its own HTTP auth, in seconds.
        2. Your documents went through the Data Ingestion API: queued, validated, then enriched — GPU vector embeddings, sentiment, language detection, autocomplete fields — automatically.
        3. A complete, responsive search UI appeared at search.opensolr.com/your_index — facets, autocomplete, AI Hints — zero front-end work.
        4. Your questions ran hybrid retrieval (BM25 + kNN) and a streaming RAG answer with inline citations — the same APIs our LangChain, LlamaIndex and Haystack integrations use.

        And this sandbox shows maybe a third of it. With a real account you also get search tuning (field weights, freshness boost, vector/lexical balance — from sliders), query elevation (pin or bury results per query), facet mapping, live query analytics, error audit, backups, teams, the web crawler — and of course the raw Solr index itself, to query directly from your own applications with any Solr client library, exactly like you just did with curl.

        Want one that doesn't self-destruct?

        15-day free trial, everything enabled, no credit card. After the trial, plans start at €17/month (billed yearly). Plug it into Drupal, WordPress, LangChain or anything with HTTPS.