Hybrid search orchestrator for the memory system.
Runs text and vector searches in parallel, merges results via Reciprocal Rank Fusion, applies temporal decay and composite scoring, and returns the top N results.
When no embedding provider is configured, falls back to text-only search.
Summary
Functions
Search memories using hybrid text + vector retrieval.
Types
@type search_opts() :: [ scope: map() | :global, limit: pos_integer(), min_score: float(), type: Nous.Memory.Entry.memory_type() | nil, scoring_weights: keyword(), decay_lambda: float(), now: DateTime.t() ]
Functions
@spec search(module(), term(), String.t(), module() | nil, keyword()) :: {:ok, [{Nous.Memory.Entry.t(), float()}]} | {:error, term()}
Search memories using hybrid text + vector retrieval.
Options
:scope- Map of scoping fields to filter by, or:globalfor no filtering:limit- Maximum results to return (default: 10):min_score- Minimum composite score threshold (default: 0.0):type- Filter by memory type (:semantic,:episodic,:procedural):scoring_weights- Override default[relevance: 0.5, importance: 0.3, recency: 0.2]:decay_lambda- Temporal decay rate (default: 0.001)