SEARCH_LIMIT is an environment variable on the API, so changing
one is a restart, not a deploy — and never a client update. SEARCH_LIMIT is a constant in
app/config.py, deliberately: how much to return is a retrieval decision, not an operator
setting.
Ranking weights
Only the ratio matters. Some reference points for the vote term at the default weight:
Embedding model and dimension
Common widths:
text-embedding-3-small = 1536, nomic-embed-text = 768,
mxbai-embed-large = 1024.
Timeouts
Raise the query timeout on a self-hosted local model if you are seeing
503s under load;
raise the post timeout if you see embedding IS NULL accumulating.
How to tell whether a change helped
Every search is logged with its result set and each hit’s rank, so ranking changes are observable rather than felt. The three numbers worth tracking before and after any tuning change:Zero-result rate
Share of searches returning nothing. Rising means recall is getting worse or the corpus
is too thin.
Vote-through rate
Share of searches followed by a vote on one of their results, within the session. The
closest proxy available for “the top results were useful”.
Rank of the voted hit
When a result is voted, where did it sit? Drifting down means ranking is degrading
even while recall looks fine.