Nous.Memory.Search (nous v0.13.3)

View Source

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

search_opts()

@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

search(store_mod, store_state, query, embedding_provider \\ nil, opts \\ [])

@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)