Four search modes. One policy enforcement point.
Vector similarity, BM25 keyword ranking, RRF hybrid fusion, and regex grep — all routed through the same deny-by-default policy engine with a unified audit trail.
All four search modes are available on every plan including free.
Vector search
Approximate nearest neighbor retrieval against any of Gateco's 12 supported connectors. Pass a query vector (or let the SDK embed your query string via your configured embedding model), and Gateco returns the top-k most similar chunks — filtered through active policies before they reach your application.
Vector search is the default mode and the most broadly supported across all 12 connector types.
Keyword search (BM25)
Ranked full-text search using BM25 scoring. Supported natively on Postgres-family connectors (pgvector, Supabase, Neon), Weaviate, and OpenSearch. For Qdrant and Milvus, keyword mode uses payload text matching — results match but are not ranked (uniform score=1.0).
Keyword search requires a content_column in the connector's search config. Postgres-family connectors also accept a text_search_config setting (default: "english").
Hybrid search (RRF fusion)
Combines vector and keyword retrieval using Reciprocal Rank Fusion (k=60). When a connector has native hybrid support (Postgres CTE, Weaviate, OpenSearch, Qdrant, Milvus, Azure AI Search), Gateco uses the connector's own implementation. For connectors without native hybrid, Gateco runs both legs in parallel and fuses results server-side.
The alpha parameter controls the vector-vs-keyword weight balance (0.0 = keyword only, 1.0 = vector only, 0.5 = equal weight). Some connectors (Azure AI Search, Vertex AI Search) use native RRF and ignore alpha; Gateco emits a warning in the response when alpha is set but cannot be honored.
Grep (regex and substring)
Pattern-based retrieval using regex or wildcard substring matching. Useful when you need exact string matches rather than semantic similarity — finding all documents that reference a specific contract ID, product SKU, or regulation number.
Grep patterns are validated before execution: maximum 200 characters, nested quantifiers rejected, trivial patterns (.*, .+) rejected. Invalid patterns return 422. Weaviate supports substring grep only (no regex). Grep is excluded from Grounded Answers synthesis — it works with the retrieval endpoint only.
# Python SDK — four modes on the same connector client.retrievals.execute( connector_id="conn_abc", principal_id="user_123", query="data governance policy", search_mode="hybrid", alpha=0.7, # 70% vector, 30% keyword top_k=10, )
Frequently asked questions
Which connectors support which modes?
Vector: all 12. Keyword (ranked BM25): pgvector, Supabase, Neon, Weaviate, OpenSearch, Azure AI Search. Keyword (filter-only, no BM25): Qdrant, Milvus. Hybrid (native): Postgres-family, Weaviate, OpenSearch, Qdrant, Milvus, Azure AI Search. Hybrid (server-side RRF): all others. Grep: pgvector, Supabase, Neon, OpenSearch, Pinecone, Qdrant, Milvus (substring only on Weaviate; not supported on Azure AI Search, Vertex AI).
Is search mode visible in the audit trail?
Yes. Every retrieval audit event includes the search_mode field — vector, keyword, hybrid, or grep. The field is also on policy-filter events, recorded as "policy_filter".
Can I use different modes for Grounded Answers?
Grounded Answers (POST /api/answers/execute) accepts vector, keyword, and hybrid modes. Grep is excluded from answer synthesis — semantically unranked exact matches are not useful LLM context.