Skip to content
Hybrid Search API

Hybrid search API for AI‑powered applications

Stop stitching together Elasticsearch, Pinecone, and Postgres. FoxNose is a semantic search API that combines vector search, full-text matching, pre-filter vector search, and cross-collection joins in one query — a ready-made search API for LLM apps, RAG pipelines, and SaaS products.

POST /articles/_search
{
"search_mode": "hybrid", ← RRF fusion
"vector_search": {
"query": "How to handle customer refunds?",
"fields": ["question", "answer"],
"threshold": 0.7
},

Semantic Search

Find conceptually related content using AI embeddings.

Learn more ↓
"find_text": {
"query": "refund",
"fields": ["question"],
"threshold": 0.8
},

Full-Text Search

Keyword matching with typo tolerance built in.

Learn more ↓
"where": {
"all_of": [
{ "status__eq": "published" },
{ "any_of": [
{ "category__in": ["billing", "support"] },
{ "priority__gte": 3 }
]}
]
},

Structured Filters

19 operators with unlimited AND/OR nesting.

Learn more ↓
"join": {
"as": { "author_info": "authors" },
"relations": [{
"source": "$",
"target": "author_info",
"source_field": "author"
}]
},

Cross-Collection Join

Fetch related data in one request. Up to 3 joins.

Learn more ↓
"fields": ["question", "answer", "category"],
"sort": ["-_sys.updated_at"],
"limit": 20
}

Results from vector and keyword engines are automatically merged using Reciprocal Rank Fusion (RRF) — a proven fusion search algorithm that delivers optimal relevance without manual tuning.

Semantic Search

Semantic vector search with auto‑embeddings

Users don't always know the exact words. Semantic search understands intent and finds conceptually related content using AI embeddings — the core of any RAG pipeline or AI agent memory.

Auto-Embeddings.
Mark fields as vectorizable: true. FoxNose generates embeddings automatically when content changes.
Similarity Threshold.
Set threshold: 0.7 to filter out low-relevance results. Only relevant content reaches your LLM.
Cross-Language.
Multilingual embeddings understand meaning across languages. A French question finds English content. Enterprise AI search teams use this for global knowledge bases. (Powered by Cohere Multilingual)
"vector_search": {
  "query": "How to get money back?",
  "fields": ["question", "answer"],
  "threshold": 0.7
}

// User asks: "How do I get my money back?"
// Finds: "Refund Policy and Process"
// No keyword match — semantic match!

Full-Text Search

Full-text search with typo tolerance

When users know what they're looking for, keywords matter. Full-text search finds exact matches and handles typos gracefully — no need for a separate Elasticsearch or Algolia instance.

Relevance Ranking.
Results ordered by relevance to your query, not just keyword presence.
Typo Tolerance.
threshold: 0.8 controls fuzziness. "refnd" still finds "refund" articles.
Phrase Search.
Use find_phrase for exact phrase matching when word order matters.
"find_text": {
  "query": "refnd",
  "fields": ["question", "answer"],
  "threshold": 0.8
}

// Typo: "refnd" → finds "refund"
// Ranked by relevance
// Field-specific search

Structured Filters

Pre‑filter vector search with structured queries

Combine semantic search with business rules. Pre-filter vector search by status, category, date — before ranking is applied. No need to manage separate filter pipelines.

19 Operators.
eq, gt, lt, between, in, contains, startswith, exists, null — and negations for all.
Unlimited Nesting.
Combine all_of (AND) and any_of (OR) infinitely deep.
Pre-Search Filtering.
Filters apply before vector and text search ranking — true pre-filter vector search. Reduce noise, improve relevance, and keep results within your knowledge governance boundaries.
"where": {
  "all_of": [
    { "status__eq": "published" },
    { "any_of": [
      { "category__in": ["billing"] },
      { "priority__gte": 3 }
    ]}
  ]
}

// status = published AND
// (category IN billing OR priority >= 3)

Cross-Collection Joins

Cross-collection joins in one API call

No N+1 queries. Fetch articles with authors, products with categories — all in a single API call. A search API for SaaS products that need relational data alongside semantic results.

Up to 3 Joins.
Join articles → authors → companies in one request. Complex data graphs, single API call.
Inner & Left Joins.
Inner join excludes articles without authors. Left join includes all articles.
Reference Fields.
Schema-defined relationships. reference (one-to-one) and relation (one-to-many).
{
  "question": "How to handle refunds?",
  "author_info": {
    "name": "Jane Smith",
    "email": "jane@company.com",
    "role": "Support Lead"
  }
}

// Author data nested in response
// No extra API calls needed
Zero ETL

Zero ETL search infrastructure

Save a document — vector, full-text, and data indexes update instantly and asynchronously. No embedding pipelines to build. No sync scripts to debug. That's what makes FoxNose a semantic search as a service — you focus on your product, we handle the search infrastructure.

Your Document

title: "Refund Policy"

content: "How to request..."

category: "billing"

Auto-embeddings on every save. No embedding pipeline to build.

High-performance vector index handles tens of millions of vectors. Serverless — scales automatically with your data. Cohere Multilingual model under the hood — one of the best embedding models available.

What FoxNose replaces

Database

PostgresMySQLMongoDB

Search Engine

ElasticsearchOpenSearchAlgolia

Vector DB

PineconeWeaviateQdrant

Embedding API

OpenAICohereVoyage

Sync Scripts

ETL pipelinesCron jobsWebhooks

Hybrid search API.
Vector + Text + Filters + Joins. Zero ETL.