InstantSearch widgets send a search request whenever the query or a refinement changes. Two behaviours affect how many requests that produces.
Caching reduces requests
The InstantSearch UI libraries cache duplicate searches. If a user deletes a character and retypes it, or reapplies a refinement they just removed, the library serves the cached result rather than sending a new request, so those repeats aren't billed.
Some widgets send two requests per interaction
A few widgets need two searches per user input. The refinementList widget is the common example: it sends one search to retrieve the facet counts shown beside each refinement, and a second to retrieve the actual results.
dynamicWidgets can likewise add an extra query to an existing request.
This is expected behaviour rather than a misconfiguration, but it's worth knowing when you're reconciling your request volume against the number of keystrokes you'd expect — a faceted results page can legitimately send roughly twice as many requests as a plain search box.
Reducing InstantSearch request volume
- Bundle multi-index queries into a single multi-query call, see How are multi-queries counted against my search request usage?
- Debounce keystrokes so a request isn't sent on every character, see How do I reduce my cost while using InstantSearch? and the maintained guide, Optimize search request usage.