Module HTM::LongTermMemory::RelevanceScorer ¶
| Defined in | lib/htm/long_term_memory/relevance_scorer.rb |
Relevance scoring for search results
Combines multiple signals to calculate dynamic relevance: * Vector similarity (semantic match) - config.relevance_semantic_weight (default: 0.5) * Tag overlap (categorical match) - config.relevance_tag_weight (default: 0.3) * Recency (freshness) - config.relevance_recency_weight (default: 0.1) * Access frequency (popularity/utility) - config.relevance_access_weight (default: 0.1)
Recency decay uses configurable half-life: config.relevance_recency_half_life_hours (default: 168 = 1 week)
Also provides tag similarity calculations using hierarchical Jaccard.
Constants¶
ACCESS_SCORE_NORMALIZER ¶
Access frequency normalization
DEFAULT_NEUTRAL_SCORE ¶
Default score when signal is unavailable
RELEVANCE_MAX ¶
Not documented.
RELEVANCE_MIN ¶
Not documented.
RELEVANCE_SCALE ¶
Final score scaling
Public Instance Methods¶
calculate_relevance(node:, query_tags: [], vector_similarity: nil, node_tags: nil) ¶
Calculate dynamic relevance score for a node given query context
- @param node [Hash] Node data with similarity, tags, created_at, access_count
- @param query_tags [Array@param vector_similarity [Float, nil] Pre-computed vector similarity (0-1)
- @param node_tags [Array@return [Float] Composite relevance score (RELEVANCE_MIN to RELEVANCE_MAX)
fetch_candidates_by_timeframe(timeframe:, metadata:, limit:) ¶
Fetch candidates by timeframe using raw SQL (avoids ORM overhead)
- @param timeframe [nil, Range, Array@param metadata [Hash] Filter by metadata fields
- @param limit [Integer] Maximum results
- @return [Array
recency_half_life_hours() ¶
Not documented.
search_by_tags(tags:, match_all: false, timeframe: nil, limit: 20) ¶
Search nodes by tags
- @param tags [Array@param match_all [Boolean] If true, match ALL tags; if false, match ANY tag
- @param timeframe [Range, nil] Optional time range filter
- @param limit [Integer] Maximum results
- @return [Array
search_with_relevance(timeframe:, query: nil, query_tags: [], limit: 20, embedding_service: nil, metadata: {}) ¶
Search with dynamic relevance scoring
Returns nodes with calculated relevance scores based on query context
- @param timeframe [nil, Range, Array@param query [String, nil] Search query
- @param query_tags [Array@param limit [Integer] Maximum results
- @param embedding_service [Object, nil] Service to generate embeddings
- @param metadata [Hash] Filter by metadata fields (default: {})
- @return [Array
weight_access() ¶
Not documented.
weight_recency() ¶
Not documented.
weight_semantic() ¶
Configurable scoring weights (via HTM.configuration)
weight_tag() ¶
Not documented.