Universal Search

New
Updated

Universal search queries multiple engines simultaneously — vector, keyword, and specialized indexes — and returns unified, scored results. You can stream results progressively as each engine responds.

In this guide you'll learn how to:

  • Run a multi-engine search
  • Stream results in real-time
  • Configure engine selection and scoring
  • Use autocomplete suggestions
[@portabletext/react] Unknown block type "callout", specify a component for it in the `components.types` prop

The simplest call queries all engines and returns aggregated results.

basic-universal.ts
import { Chaos } from '@chaoslabs/ai-sdk';
 
const chaos = new Chaos({ apiKey: process.env.CHAOS_API_KEY! });
 
const { results, key_highlights } = await chaos.search.universal({
  query: 'What are the top Ethereum staking options?',
  limit: 15,
});
 
console.log(`Key insight: ${key_highlights}\n`);
for (const r of results) {
  console.log(`[${r.engine_id}] ${r.title}`);
  console.log(`  ${r.description}\n`);
}

Streaming Results

For UI applications, stream results so users see content as each engine responds — rather than waiting for all engines to finish.

streaming-search.ts
const allResults: SearchResult[] = [];
 
await chaos.search.universalStream(
  {
    query: 'Morpho Blue vault strategies',
    mode: 'deep',
    score_results: true,
  },
  (event) => {
    if (event.type === 'results') {
      console.log(`⚡ ${event.engine_id}: +${event.results.length} results (${event.elapsed_ms}ms)`);
      allResults.push(...event.results);
    } else if (event.type === 'done') {
      console.log(`\n✅ Search complete: ${event.total_results} total results`);
    }
  }
);
 
console.log(`\nCollected ${allResults.length} results across all engines`);

Engine Selection

List available engines and select specific ones for your query.

engine-selection.ts
// See what's available
const engines = await chaos.search.engines();
console.log('Available engines:', engines);
 
// Target specific engines
const results = await chaos.search.universal({
  query: 'Aave v3 risk parameters',
  engines: ['vector', 'keyword'],
  mode: 'fast',
});

Site Filtering

Restrict or exclude specific domains from results.

site-filtering.ts
const results = await chaos.search.universal({
  query: 'DeFi lending risks',
  include_sites: ['aave.com', 'docs.compound.finance'],  // only these domains
  // OR
  exclude_sites: ['reddit.com', 'twitter.com'],           // exclude these
});

Autocomplete Suggestions

Power a search-as-you-type experience with real-time suggestions.

autocomplete.ts
const { suggestions } = await chaos.search.suggestions('defi yiel', 5);
// → ['defi yield farming', 'defi yield aggregator', 'defi yield optimization', ...]
 
for (const s of suggestions) {
  console.log(`  → ${s}`);
}
Was this helpful?