opensolr-haystack
Haystack integration for Opensolr — managed Apache Solr as a DocumentStore, with server-side embeddings and native hybrid (BM25 + kNN) retrieval.
No embedder components needed in your pipeline — texts and queries are embedded on Opensolr's GPU infrastructure (multilingual E5-large-instruct, 1024 dimensions, cosine).
Product page: opensolr.com/langchain · free 15-day trial, no card, at opensolr.com
pip install opensolr-haystack
Quickstart
from haystack import Document, Pipeline
from haystack_integrations.document_stores.opensolr import OpensolrDocumentStore
from haystack_integrations.components.retrievers.opensolr import OpensolrHybridRetriever
# credentials default to OPENSOLR_EMAIL / OPENSOLR_API_KEY env vars
store = OpensolrDocumentStore(index="mysite__dense", create_if_missing=True)
store.write_documents([
Document(content="Hybrid search fuses BM25 with vector similarity"),
Document(content="Cats sleep sixteen hours a day"),
])
pipe = Pipeline()
pipe.add_component("retriever", OpensolrHybridRetriever(document_store=store))
result = pipe.run({"retriever": {"query": "how do keyword and semantic search combine?"}})
print(result["retriever"]["documents"])
Note there is no embedder in the pipeline — not for documents, not for the query. The store embeds server-side at both index and query time.
Hybrid retrieval
OpensolrHybridRetriever fuses BM25 and kNN scores per document via
Opensolr's native {!hybrid} Solr query parser:
OpensolrHybridRetriever(
document_store=store,
top_k=10,
hybrid=True, # False = pure semantic kNN
alpha=0.5, # 0 = all semantic … 1 = all lexical
)
Standard Haystack filters are supported and map to Solr fq:
pipe.run({"retriever": {
"query": "search engines",
"filters": {"field": "meta.category", "operator": "==", "value": "docs"},
}})
Notes
- Vector-enabled indexes run on Opensolr's Solr 9.x environments — currently
us(Chicago),de(Germany),fi(Finland). Additional dedicated regions can be deployed on request (paid add-on): support@opensolr.com. - Every index is also plain Apache Solr with the native
/selectAPI — facets, highlighting, spellcheck included. - Siblings:
langchain-opensolr·llama-index-opensolr·opensolr-mcp
How writing works (Data Ingestion API)
Writes go through Opensolr's Data Ingestion API
— the same pipeline the Drupal and WordPress connectors use. It is
asynchronous: documents are queued, then embeddings, sentiment, language
and all crawler-identical derived fields are computed server-side, and
documents become searchable within about a minute. Progress is visible in the
Opensolr Control Panel and via the ingest_status API. Each document's
identity is its uri (the Solr id is md5(uri)): pass a real URL in
metadata ({"uri": "https://..."}), or a deterministic one is synthesized
from your id. Re-submitting the same uri updates the document. Pass
{"rtf": True, "uri": "https://.../file.pdf"} and the server extracts the
text from PDF/DOCX/XLSX for you.
Lexical-only mode
Don't need vectors? Pure keyword search skips the embedding call entirely — zero AI quota, and it works on any Opensolr index, including non-vector ones and older Solr versions.
Your index schema
Documents follow the Opensolr document model (title, description, text,
meta_* custom fields). To see the full schema: Control Panel → click your
index → Configuration → Edit File → schema.xml. Prefer zero-effort data
entry? Configure the Web Crawler in the Control Panel (Index Tools →
WebCrawler): add your site URL, validate it, and Opensolr indexes the whole
site for you.
MIT license.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file opensolr_haystack-0.2.0.tar.gz.
File metadata
- Download URL: opensolr_haystack-0.2.0.tar.gz
- Upload date:
- Size: 13.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/7.0.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
43508f894c6791dfd42179caa469655af0e562b4a43e71d4af05e732d113c6dd
|
|
| MD5 |
9c4431d3c87729c364ba33d24d0e6b76
|
|
| BLAKE2b-256 |
7aae9b274a5b8e7cf043b0a6095c331e98dc7f0d3d86485393cc8fb9488d0325
|
File details
Details for the file opensolr_haystack-0.2.0-py3-none-any.whl.
File metadata
- Download URL: opensolr_haystack-0.2.0-py3-none-any.whl
- Upload date:
- Size: 13.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/7.0.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
66acee59b700d4d1e546870805c924c547acfb948733186f05c90b9cae452fac
|
|
| MD5 |
59dfd07ccf9aa03b30e48eaec641becb
|
|
| BLAKE2b-256 |
8cde30c64c901ef75d9be7607d3b49148dd53d9fa83b52da47a0937fdfc61ea0
|