The engine under Polign Recall
polign_db stores and searches everything Polign Recall remembers. It is a vector, keyword, and hybrid search engine served straight out of your own object storage, and you can also use it directly.
How it works
Storage and compute are separated all the way down. Your bucket holds the data, the indexes, and the write log; the nodes hold nothing but a cache. That one decision is what makes a node disposable, a collection free while it sleeps, and the cost of search a function of the compute you choose to run.
Cold-first serving
A query is answered from the node's RAM cache when the data is hot, from an optional NVMe tier when it is warm, and straight from your bucket when it is neither. Nothing has to be loaded into memory first, so a collection you touch once a week costs what its bytes cost in object storage, and a node that dies takes no data with it.
A contract, not a hope
A write is acknowledged only after it is durable in your bucket's log, and the log gives one order per collection. The next query sees that write, from any node, including one that has never cached the collection. The single exception is stated as plainly as the guarantee: a document's text joins the BM25 index at the next segment flush, seconds later, while vector search over the same write is immediate.
Feature set
The full feature set ships in one server binary, with no tiers and no add-ons.
- Vector search with three index types, fastest to most compact
- Keyword search with BM25 built in, served from your bucket
- Hybrid search that blends meaning and keywords in one query
- Metadata filters for exact match, lists, ranges, and combinations
- API-key auth with bearer keys guarding management calls
- gRPC and HTTP/JSON with the same operations either way
- One static binary with no Docker and no dependencies to run
- Clients for Go and Python
- Your cloud's object store: S3, GCS, Azure Blob, MinIO, R2
- Durable write log in your bucket, no Kafka
- Batch upserts of up to 5,000 vectors per call
- Cold search straight from the bucket, with no RAM index
- Read-your-writes, immediate for vector search even on cold reads; BM25 text at the next flush
- Disk cache tier, an optional NVMe layer between RAM and S3
- Zero-downtime rebuilds with atomic index swap-in
- ~32× compression with accuracy re-checked against the full vectors
- Scale to zero on stateless, disposable nodes