AI Integrations
Opensolr plugs natively into the frameworks and agent ecosystems people use to build RAG and AI search in 2026. Underneath every integration it is the same platform: a managed, vector-enabled Apache Solr 9 index, server-side GPU embeddings (multilingual E5, 1024 dimensions), and the {!hybrid} query parser that fuses BM25 and kNN scores per document. You never run an embedding model, and you never send us vectors — just text.
Writes in every integration go through the Data Ingestion API — the same pipeline the Drupal and WordPress connectors use. Ingestion is asynchronous: documents are queued, enriched server-side (embeddings, sentiment, language, derived fields), and become searchable within about a minute; progress is visible in Control Panel → Data Ingestion — a per-job status board with detailed document counts (queued / processing / completed / failed) — and via the ingest_status API. Every integration also offers a lexical-only mode (pure keyword search, zero AI quota) that works on any Opensolr index, including non-vector ones.
All integrations authenticate with the same two values: your account email and your API key (Account → API in the control panel). Vector-enabled indexes are created in the us (Chicago), de (Germany) or fi (Finland) regions — the live list is available programmatically, and additional dedicated regions can be deployed on request (paid add-on).
There is a public demo account. Every integration below works against it immediately, with no signup: email mcp@opensolr.com, API key 420b8b23e7b12dc8ab838932145a5065. The index mcp_demo_d1__dense is preloaded with 300 news articles, and you can create your own indexes on the account and ingest into them.
Anything you create there is deleted after 3 days, automatically and without warning. The account is shared with everyone reading this page — your index is visible to them and they can add documents to it, as you can to theirs. Nothing here can be deleted or reconfigured through this key, but never put anything real or client-owned in it. The limits are per index and deliberately small: 200 MB of bandwidth and 50 MB of disk. Bandwidth is the one you will hit first; it covers a demo and a proof of concept, not an application. For an index that is private and stays put, get your own key — the free plan is free forever, no card.
LangChain (Python)
Opensolr is a native LangChain vector store, listed in the official LangChain integrations directory with its own provider card.
pip install langchain-opensolr
You get OpensolrVectorStore (add_texts, similarity_search with hybrid=True, metadata filters, auto index provisioning via create_if_missing=True) and OpensolrEmbeddings. vs.as_retriever() drops straight into any chain, agent, or RAG tutorial. Since 0.5.0, search_by_image() searches with a photo — visual labels, OCR text or a barcode become the query.
Links: product page · PyPI · GitHub · FAQ
MCP — AI Agents (Claude, Cursor, and any MCP client)
The official Opensolr MCP server gives any Model Context Protocol agent your search as native tools: hybrid retrieval, search by image, document indexing with automatic embeddings, grounded RAG answers, index management, and ingestion job status — 10 tools in total. It is published in the official MCP Registry under our domain-verified com.opensolr namespace.
{
"mcpServers": {
"opensolr": {
"command": "uvx",
"args": ["opensolr-mcp"],
"env": {
"OPENSOLR_EMAIL": "you@example.com",
"OPENSOLR_API_KEY": "YOUR_OPENSOLR_API_KEY"
}
}
}
}
The agent gains the powers of the API key you give it. Use a dedicated Opensolr account (or at least a non-critical one) for agent configurations, exactly as you would with any automation credential.
Links: product page · MCP Registry · PyPI · GitHub · FAQ
LlamaIndex (Python)
Native LlamaIndex integration under the standard namespaces llama_index.vector_stores.opensolr and llama_index.embeddings.opensolr.
pip install llama-index-opensolr
OpensolrVectorStore supports VectorStoreQueryMode.HYBRID with a tunable alpha (semantic↔lexical balance) and maps standard MetadataFilters (EQ, NE, IN, NIN, ranges) to Solr filters. Your VectorStoreIndex, retriever, and query engine work unchanged.
Links: product page · PyPI · GitHub · FAQ
Haystack (Python)
An Opensolr DocumentStore plus a hybrid retriever for Haystack pipelines — with zero embedder components. A typical Haystack pipeline needs one embedder for documents and another for queries; with Opensolr both are unnecessary, because everything embeds server-side.
pip install opensolr-haystack
OpensolrDocumentStore implements the full protocol (DuplicatePolicy, standard filter dicts, Secret-based credentials, serialization for saved pipelines) and OpensolrHybridRetriever exposes hybrid/alpha with per-run overrides. Since 0.5.0, store.search_by_image() searches a pipeline with a photo instead of a query.
Links: product page · PyPI · GitHub · FAQ
Laravel Scout (PHP)
An official Laravel Scout engine: set SCOUT_DRIVER=opensolr and every Searchable model gets hybrid semantic search through the standard Model::search() API.
composer require opensolr/laravel-scout-opensolr
Scout's where() / whereIn() map to Solr filters with full operator support, pagination returns real totals, and one Opensolr index serves all your models — documents are scoped per model automatically, so a single plan covers the whole application. Since v0.5.0, OpensolrClient::imageToWords() reads a photo into words you can search with. The package auto-updates on Packagist with every release.
Links: product page · Packagist · GitHub · FAQ
Search operators — the same in every package
The query string you pass to any of the packages above understands the operators people expect from a search box, in keyword, hybrid and pure-vector mode alike:
| Operator | What it does | Example |
|---|---|---|
"word1 word2" | Phrase — those words together, in that order | "machine learning" |
+word / +"word1 word2" | Required — every result must contain it | +"13 inch" |
-word / -"word1 word2" | Excluded — drop any document containing it | -refurbished |
They compose: +laptop +"13 inch" -refurbished returns only 13-inch laptops and never a refurbished one.
A prefixed term is applied as a filter over the whole result set rather than being left in the query text, which is what makes it hold in a hybrid search: the semantic side has no concept of negation, so -refurbished left inside the text would move results towards refurbished listings instead of removing them. The excluded term never reaches the embedding model either. An unprefixed phrase stays a keyword-side relevance signal — use +"…" to enforce it — and +/- only count at the start of a word, so e-mail and covid-19 are searched for literally.
Links: how the fusion works · the same operators on the hosted search page
REST API (any language)
Every capability above is plain HTTPS underneath — usable from any language. The management API lives on opensolr.com, the AI endpoints on api.opensolr.com:
| Endpoint | What it does |
|---|---|
embed / batch_embed | 1024-dim multilingual embeddings for a query or up to 50 documents per call |
embed_and_search | One-shot: embed the query, run the platform's tuned hybrid search, return ranked results. The index's saved Search Tuning applies automatically; per-request overrides: fw_*, lexical_weight, vector_weight, vector_topk, search_mode, quality_boost, min_score, mm |
ai_summary | Streaming AI answer/summary of a provided context — pair with embed_and_search (search first, summarize the top results) for grounded RAG |
image_ocr | Read the text printed in a picture — gas receipts, supplier invoices, shelf labels, screenshots, business cards — up to ten pictures per call, and index those words so the document is found by what is written on it |
image_to_text | Search by image: post a photo, get back the words that describe it (or the text read off a label or receipt), then search with them like any typed query — no image vectors and no schema changes on your side |
geo_lookup | Resolve up to 50 IP addresses in one call to country, city, coordinates and IANA timezone — lives on opensolr.com, not the api box |
nearby_places | Turn one or up to 50 GPS coordinate pairs into the nearest named place — city, region, province, community, country — with answers kept permanently; lives on opensolr.com |
place_search | Find places by name — cities, towns, counties and countries, matched as they are typed, with or without diacritics and in any language — each with its region, country, coordinates and kind; lives on opensolr.com |
vector_regions | Live list of vector-enabled environments |
The embedding, hybrid search, AI answer and image endpoints draw on your monthly allowance. geo_lookup, nearby_places, place_search and vector_regions do not. See API Quota for the live list and how each call is counted.
Links: AI & Vector Search docs · full API reference · Embed API guide · Vector Search Schema Reference (the fields and type suffixes every package writes into)