Semantic Search Query Patterns
Query engineering determines retrieval quality. Raw user questions rarely match how information is stored. These patterns transform user intent into effective vector searches.
Core principle: Combine patterns. A single search often benefits from expansion + filtering + temporal awareness.
Query Patterns
| Pattern | When to Use |
|---|---|
| Expansion | User vocabulary differs from document vocabulary; want recall over precision |
| Decomposition | Multi-faceted questions (procedure + legal + technical); cross-domain queries |
| Contextual Rewriting | Multi-turn conversations; pronouns or references to previous context |
| Diagnostic Expansion | User describes a problem; troubleshooting scenarios |
| Self-Ask | Ambiguous queries; high-stakes queries where precision matters |
| HyDE | Vague questions; user doesn't know domain vocabulary; large semantic gap |
| Metadata Pre-filtering | Large corpus; known user context; document lifecycle states |
| Multi-hop Retrieval | Questions about document relationships; hierarchical navigation |
| Temporal Rewriting | Versioned corpus; time-sensitive documents; document lifecycle |
Pattern Combinations
Complex compliance question:
- •Decomposition - Break into legal + procedural sub-queries
- •Metadata filtering - Filter by region and doc_type
- •Temporal - Ensure current/approved versions
Vague troubleshooting query:
- •Self-Ask - Generate clarifying questions
- •Diagnostic Expansion - Cover symptoms + causes + solutions
- •Query Expansion - Add vocabulary variations
Follow-up in conversation:
- •Contextual Rewriting - Inject prior context
- •HyDE - Bridge short question to detailed docs
- •Multi-hop - Find referenced doc, then search within it
Result Aggregation
When running multiple queries:
- •Reciprocal Rank Fusion (RRF): Weight by position across result sets
- •Score normalization: Normalize similarity scores, then combine
- •De-duplication: Remove duplicate chunks by ID before final ranking
Reference
For code examples and implementation details of each pattern, see patterns.md.