Skip to main content

Retrieval Strategies Reference

Retrieval strategies control how documents are searched and ranked. LlamaFarm provides strategies from basic similarity search to advanced multi-stage retrieval.

Quick Start

Retrieval strategies are configured in retrieval_strategies within a database:

rag:
databases:
- name: main_db
retrieval_strategies:
- name: semantic_search
type: BasicSimilarityStrategy
config:
top_k: 10
default: true

Common Properties

PropertyRequiredDescription
nameYesStrategy identifier
typeYesStrategy type
configNoStrategy-specific options
defaultNoWhether this is the default strategy

BasicSimilarityStrategy

Simple vector similarity search. Fast and effective for most use cases.

Best for: General semantic search, simple queries

- name: semantic_search
type: BasicSimilarityStrategy
config:
top_k: 10
distance_metric: cosine
score_threshold: 0.5

Options

OptionTypeDefaultDescription
top_kinteger10Number of results (1-1000)
distance_metricstringcosinecosine, euclidean, manhattan, dot
score_thresholdnumbernullMinimum similarity score (0-1)

MetadataFilteredStrategy

Filter results using document metadata before or after retrieval.

Best for: Faceted search, filtering by date/type/category

- name: filtered_search
type: MetadataFilteredStrategy
config:
top_k: 10
filter_mode: pre
filters:
doc_type: report
year: 2024

Options

OptionTypeDefaultDescription
top_kinteger10Number of results (1-1000)
filtersobject{}Metadata key-value filters
filter_modestringprepre (before retrieval) or post (after)
fallback_multiplierinteger3Multiplier for post-filtering

Filter Examples

filters:
# Exact match
doc_type: report

# Multiple values (OR)
category: [finance, legal]

# Numeric
year: 2024

MultiQueryStrategy

Generate multiple query variations for better recall.

Best for: Complex queries, improving recall

- name: multi_query
type: MultiQueryStrategy
config:
num_queries: 3
top_k: 10
aggregation_method: weighted

Options

OptionTypeDefaultDescription
num_queriesinteger3Query variations (1-10)
top_kinteger10Results per query (1-1000)
aggregation_methodstringweightedmax, mean, weighted, reciprocal_rank
query_weightsarraynullWeights for each query

Aggregation Methods

MethodDescription
maxTake highest score per document
meanAverage scores across queries
weightedWeight by query importance
reciprocal_rankRRF fusion of rankings

RerankedStrategy

Two-stage retrieval with score-based reranking.

Best for: Balancing recall and precision

- name: reranked
type: RerankedStrategy
config:
initial_k: 30
final_k: 10
normalize_scores: true
rerank_factors:
similarity_weight: 0.7
recency_weight: 0.2
length_weight: 0.1

Options

OptionTypeDefaultDescription
initial_kinteger30Initial candidates (10-1000)
final_kinteger10Final results (1-100)
normalize_scoresbooleantrueNormalize before combining
rerank_factorsobjectSee belowWeighting factors

Rerank Factors

rerank_factors:
similarity_weight: 0.7 # Vector similarity
recency_weight: 0.1 # Document freshness
length_weight: 0.1 # Content length
metadata_weight: 0.1 # Metadata relevance

HybridUniversalStrategy

Combine multiple retrieval strategies with score fusion.

Best for: Complex retrieval needs, combining sparse and dense

- name: hybrid
type: HybridUniversalStrategy
config:
final_k: 10
combination_method: weighted_average
strategies:
- type: BasicSimilarityStrategy
weight: 0.6
config:
top_k: 20
- type: MetadataFilteredStrategy
weight: 0.4
config:
top_k: 20
filters:
doc_type: report

Options

OptionTypeDefaultDescription
strategiesarray-Sub-strategies to combine (2-5)
combination_methodstringweighted_averageFusion method
final_kinteger10Final results (1-1000)

Combination Methods

MethodDescription
weighted_averageWeighted average of scores
rank_fusionReciprocal rank fusion
score_fusionDirect score fusion

Sub-Strategy Format

strategies:
- type: BasicSimilarityStrategy # Strategy type
weight: 0.6 # Relative weight (0-1)
config: # Strategy config
top_k: 20

Available sub-strategy types:

  • BasicSimilarityStrategy
  • MetadataFilteredStrategy
  • MultiQueryStrategy
  • RerankedStrategy

CrossEncoderRerankedStrategy

Neural reranking using cross-encoder models for highest accuracy.

Best for: High-precision search, quality-critical applications

- name: reranked_search
type: CrossEncoderRerankedStrategy
config:
model_name: reranker
initial_k: 30
final_k: 5
relevance_threshold: 0.3

Requires a reranker model in runtime:

runtime:
models:
- name: reranker
provider: universal
model: cross-encoder/ms-marco-MiniLM-L-6-v2
base_url: http://127.0.0.1:11540

Options

OptionTypeDefaultRequiredDescription
model_namestring-YesName of model from runtime.models
initial_kinteger30NoInitial candidates (10-100)
final_kinteger10NoFinal results (1-50)
base_strategystringBasicSimilarityStrategyNoInitial retrieval strategy
base_strategy_configobject{}NoConfig for base strategy
relevance_thresholdnumber0.0NoMinimum relevance (0-1)
timeoutinteger60NoRequest timeout in seconds
ModelSizeSpeedMultilingual
cross-encoder/ms-marco-MiniLM-L-6-v290MBVery FastNo
BAAI/bge-reranker-base280MBFastYes
BAAI/bge-reranker-v2-m3560MBMediumYes

See Advanced Retrieval Strategies for detailed model recommendations.


MultiTurnRAGStrategy

Query decomposition for complex, multi-part questions.

Best for: Complex queries, multi-aspect questions

- name: multi_turn
type: MultiTurnRAGStrategy
config:
model_name: query_decomposer
max_sub_queries: 3
complexity_threshold: 50
final_top_k: 10
enable_reranking: true

Requires a decomposition model in runtime:

runtime:
models:
- name: query_decomposer
provider: openai
model: gemma3:1b
base_url: http://localhost:11434/v1

Options

OptionTypeDefaultRequiredDescription
model_namestring-YesDecomposition model name
max_sub_queriesinteger3NoMax sub-queries (1-5)
complexity_thresholdinteger50NoMin chars to trigger decomposition
min_query_lengthinteger20NoMin length per sub-query
base_strategystringBasicSimilarityStrategyNoStrategy for sub-queries
base_strategy_configobject{}NoBase strategy config
sub_query_top_kinteger10NoResults per sub-query
final_top_kinteger10NoFinal merged results
enable_rerankingbooleanfalseNoRerank each sub-query
reranker_strategystringCrossEncoderRerankedStrategyNoReranking strategy
reranker_configobject{}NoReranker configuration
dedup_similarity_thresholdnumber0.95NoDedup threshold (0.5-1)
max_workersinteger3NoParallel workers (1-10)

See Advanced Retrieval Strategies for detailed configuration.


Additional Retriever Types

These types are also available for use in database configurations:

TypeDescription
VectorRetrieverBasic vector search
HybridRetrieverHybrid sparse/dense
BM25RetrieverKeyword-based BM25
RerankedRetrieverGeneric reranker
GraphRetrieverGraph-based retrieval
ElasticRetrieverElasticsearch backend

Strategy Selection Guide

Query TypeRecommended StrategyWhy
Simple, specificBasicSimilarityStrategyFast, effective
Filtered searchMetadataFilteredStrategyPrecise filtering
Broad topicsMultiQueryStrategyBetter recall
Quality-criticalCrossEncoderRerankedStrategyHighest accuracy
Complex questionsMultiTurnRAGStrategyQuery decomposition
Mixed requirementsHybridUniversalStrategyCombine approaches

Multiple Strategies Example

Configure multiple strategies and switch at query time:

retrieval_strategies:
# Fast default
- name: fast
type: BasicSimilarityStrategy
config:
top_k: 10
default: true

# Filtered by type
- name: by_type
type: MetadataFilteredStrategy
config:
top_k: 10
filter_mode: pre

# High accuracy
- name: accurate
type: CrossEncoderRerankedStrategy
config:
model_name: reranker
initial_k: 30
final_k: 5

# Complex queries
- name: complex
type: MultiTurnRAGStrategy
config:
model_name: query_decomposer
enable_reranking: true

default_retrieval_strategy: fast

Query with specific strategies:

# Use default (fast)
lf rag query --database main_db "simple question"

# Use accurate strategy
lf rag query --database main_db --retrieval-strategy accurate "important question"

# Use complex for multi-part questions
lf rag query --database main_db --retrieval-strategy complex \
"What are the benefits of X and how does it compare to Y?"

Next Steps