# `Nous.Memory.Search`
[🔗](https://github.com/nyo16/nous/blob/v0.17.1/lib/nous/memory/search.ex#L1)

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.

# `search_opts`

```elixir
@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()
]
```

# `search`

```elixir
@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 `:global` for 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)

---

*Consult [api-reference.md](api-reference.md) for complete listing*
