search

Search

Search is the first step in a Console algorithm. It selects candidate records from one supported index, applies filters, sorts the candidates, and returns hydrated records for preview or feed delivery.

The current Console builder flow is:

  1. choose an index,
  2. add filters,
  3. choose sorting and result size,
  4. hydrate the returned rows with .include(),
  5. return the output.

There is no separate Features, Scoring, or Ranking step in the current Console builder before output.

Console index dropdown

Use the exact index names shown in the Console algo-builder dropdown:

IndexUse
polymarket-tradesPolymarket trade events
polymarket-itemsPolymarket market items
hyperliquid-tradesHyperliquid trade events
base-tradesBase DEX trade events
ethereum-tradesEthereum DEX trade events
solana-tradesSolana DEX trade events
token-itemsToken or coin items
hyperliquid-itemsHyperliquid market or asset items
hyperliquid-notificationsHyperliquid notification candidates
dex-notificationsDEX notification candidates
polymarket-notificationsPolymarket notification candidates
kalshi-notificationsKalshi notification candidates
wallet-usersCross-protocol wallet profiles
hyperliquid-walletsHyperliquid wallet profiles
polymarket-walletsPolymarket wallet profiles

Filters

Console supports the same filter families generated into DSL:

  • term and match filters for exact or text-like matching.
  • numeric filters such as volume_24hr >= 1000.
  • date filters for timestamp windows.
  • is_null and not_null filters.
  • in_app_users joins for account-owned users or wallets.
  • console_account filters for account-scoped data.
  • item-id filters when a workflow starts from known item ids.

Use frequent values from the UI when picking categorical fields such as chains, apps, tags, labels, or status values.

Working feed algorithm

This feed algorithm searches Polymarket markets, hydrates the rows, sorts by recent volume, and returns the top 25 records.

import { StudioV1 } from "algo-dsl";

export default async function algo({ apiKey }) {
  const mbd = new StudioV1({ apiKey });

  const results = await mbd
    .search()
    .index("polymarket-items")
    .include()
    .numeric("volume_24hr", 1000)
    .notNull("question")
    .sortBy("volume_24hr", "desc")
    .size(25)
    .execute();

  return results;
}

Working notification candidate search

Notification algorithms use the same search and hydration surface. This example finds DEX notification candidates for account-owned wallet users.

import { StudioV1 } from "algo-dsl";

export default async function notificationAlgo({ apiKey }) {
  const mbd = new StudioV1({ apiKey });

  const candidates = await mbd
    .search()
    .index("dex-notifications")
    .include()
    .inAppUsers("wallet_address")
    .notNull("user_id")
    .sortBy("timestamp", "desc")
    .size(50)
    .execute();

  return candidates;
}

Frequent values

Use frequent values to discover available values for fields before adding a filter.

const tags = await mbd
  .search()
  .index("polymarket-items")
  .frequentValues("tags", 25);