Polars · Semantic Search
Polars Semantic Search in One Line of Python
Omna gives Polars DataFrames native semantic (vector) search. Local-first, Rust-powered, zero network calls. Search by meaning, not by string match.
The one-line API
import polars as pl
import omna # registers the .omna namespace
df = pl.read_parquet("clinical_notes.parquet")
# Semantic search — returns the top-3 rows most similar
# to the query, with a relevance score column appended.
results = df.omna.search("chest pain radiating to left arm", top_k=3)Why semantic search on Polars?
Polars is the fastest DataFrame library in Python. But until now, searching text columns meant brittle regex, str.contains, or shipping your data to Pinecone, Weaviate, or pgvector. Omna closes that gap: vector search becomes a method on the DataFrame itself, indexed and queried in-process with a Rust kernel.
Benchmarks
- · ~12ms p50 latency on 1M rows (M2 MacBook, MiniLM embeddings)
- · 0 network calls — runs in your Python process
- · HIPAA-compatible by design — no egress, no BAA required
vs Pinecone, Weaviate, pgvector
Pinecone, Weaviate, Qdrant, and pgvector are excellent for production, multi-tenant, low-latency search-as-a-service. For analytical Polars pipelines — notebooks, ETL jobs, ad-hoc exploration — they are operationally heavy: containers, indexes, network hops, vendor approvals. Omna trades that infrastructure for an in-process Rust kernel that runs wherever Polars runs.
Try it now
The live playground on omna.dev runs a real Polars semantic search on a sample healthcare dataset, in your browser.
pip install omna