Schedule Boost Rules for Campaigns

Saved boost rules lift matching documents in every search that runs with enableBoost: true, and they live on the dataset, so editors manage them in the web console's Boost rules tab without touching code. Rules can carry a date window — the tool for campaigns, seasonal promotion and new-release pushes.

A rule

json
{
  "name": "Autumn crime campaign",
  "enabled": true,
  "strength": "High",
  "join": "And",
  "conditions": [
    { "field": "genre", "value": "crime" },
    { "field": "publishedYear", "min": 2025 }
  ],
  "activeFrom": "2026-09-15",
  "activeUntil": "2026-10-31"
}
  • conditions — on filterable fields: { field, value } for an exact value (strings, numbers, booleans) or { field, min?, max? } for a numeric range. join is And or Or.
  • strength — Low, Med or High. Rules stack: a document matching two rules is lifted by both.
  • activeFrom / activeUntil — optional dates (inclusive). Outside the window the rule is ignored; leave both out for an always-on rule. enabled: false switches a rule off without deleting it.

When a rule expires

A rule past its activeUntil stops applying the next day. Nothing is deleted, so it is easy to miss — the tab makes it visible three ways: an Expired chip on the rule (and a signal-coloured border), a summary line above the list ("3 of 5 rules applying today · 1 expired"), and a count badge on the Boost rules tab button so it shows from any tab. Rules that have not started yet show Starts <date>; switched-off rules show Off.

Editors and admins of the team also receive an in-app Boost rule expired notification the day after a rule ends (once per rule; mute or route it to email under Account → Manage → Notifications). Extend the dates, switch the rule off, or delete it.

Import and export

The Boost rules tab has Import from json and Export as json, using the same array format as the HTTP endpoints below. Import replaces the working list and leaves it unsaved, so you can review it and Save, or Cancel to revert. Rules that reference fields this dataset does not have are kept and stay dormant (flagged in the tab) until such a field appears — handy for copying a campaign set between datasets that share a schema.

Over HTTP

GET    …/boosts          → BoostRule[]
PUT    …/boosts          ← BoostRule[]   (replaces the whole list; editor role)
DELETE …/boosts

Boosts also apply to agent searches over MCP and to the web console's search preview, so what an editor sees is what the site serves.

Popularity and sales ranking

Indx records clicks and conversions when your front-end sends them (see Statistics), but it does not rank on them by itself. To rank by popularity, store a number on each document, for example the conversion counts from Statistics, ("popularity": 87) — updated as often as you like through the real-time document endpoints — and boost on ranges of it:

json
{ "name": "Bestsellers", "strength": "Med", "conditions": [ { "field": "popularity", "min": 80 } ] }

Per-user personalisation

For boosts that differ per request rather than per dataset, build an ad-hoc boost from a filter and pass it with the query — see Set Up Personalized Boosting.

What boosts do not do

There is no negative boost ("bury") and no pinned position: relevance stays the primary order and a boost only lifts. High is the strongest lift available.