symfony/ai-azure-search-store
Azure AI Search vector store integration for Symfony AI Store. Index and query embeddings using Azure AI Search, with links to Microsoft docs on vector search overview, creating vector indexes, and running vector queries.
count() enables index-health dashboards, ingest reconciliation, "1,240 results" UI, per-tenant document quotas, and cost forecasting — previously a reason to keep hand-rolled REST calls alongside the abstraction.VectorDocumentInterface creates a genuine portability seam, which is directly useful for vendor negotiation ("we can move") and for unit testing without hitting Azure.tenant_id, category) means we can ship one index with logical isolation instead of per-customer infrastructure — a significant operational and pricing lever.Adopt when:
symfony/ai's StoreInterface — Laravel integration via a service provider plus a thin facade is straightforward.Look elsewhere when:
pgvector avoids a second vendor and second consistency model.To executives:
"This is a small adapter, not a platform bet. It lets us ship semantic search and RAG features on top of the Azure contract we already have — no new vendor, no new procurement, no new security review. The integration itself is weeks, not quarters, and it is deliberately thin. The new
VectorDocumentInterfacegives us a documented exit path, so we are not locked in. What I'm asking for is one engineer for 2–4 weeks for a pilot, with a cost-and-latency review gate before we commit to broader rollout."
To engineering:
"It implements
symfony/ai'sStoreInterfacefor Azure AI Search, so we are not hand-rolling index creation, embedding upserts, or filtered vector queries against the Azure REST API. PSR-compatible, so Laravel wiring is a service provider, a facade, and a DTO implementingVectorDocumentInterface. Pin to0.14.*, keep all Azure-specific code in one adapter class, and treatsymfony/aias the volatile dependency to upgrade deliberately. Two new surfaces in v0.14.0:count()andVectorDocumentInterface— both additive, but the interface is a new public contract and document construction code should be reviewed against it."
Caveats to state openly, in the same breath:
count() inherits the same approximation.count() is a billable call; if a dashboard polls it, it must be cached or scheduled, never computed per page view.How can I help you explore Laravel packages today?