Class: Woods::Retrieval::SearchExecutor
- Inherits:
-
Object
- Object
- Woods::Retrieval::SearchExecutor
- Defined in:
- lib/woods/retrieval/search_executor.rb
Overview
SearchExecutor maps a query classification to a retrieval strategy and executes it against the configured stores.
Strategies:
-
:vector — semantic similarity search (understand, implement, debug)
-
:keyword — exact identifier/text matching (locate, reference)
-
:graph — dependency traversal (trace)
-
:hybrid — vector + keyword + graph expansion (exploratory/comprehensive)
-
:direct — direct metadata lookup (pinpoint + locate/reference)
Defined Under Namespace
Classes: Candidate, ExecutionResult
Constant Summary collapse
- STRATEGY_MAP =
Strategy mapping from (intent, scope) → strategy.
Covers pinpoint overrides for locate/reference (:direct). Trace and framework intents are handled before this map is consulted.
{ %i[locate pinpoint] => :direct, %i[reference pinpoint] => :direct }.freeze
Instance Method Summary collapse
-
#execute(query:, classification:, limit: 20, type_filter: nil, strategy: nil) ⇒ ExecutionResult
Execute a search based on query classification.
-
#initialize(vector_store:, metadata_store:, graph_store:, embedding_provider:) ⇒ SearchExecutor
constructor
A new instance of SearchExecutor.
Constructor Details
#initialize(vector_store:, metadata_store:, graph_store:, embedding_provider:) ⇒ SearchExecutor
Returns a new instance of SearchExecutor.
47 48 49 50 51 52 |
# File 'lib/woods/retrieval/search_executor.rb', line 47 def initialize(vector_store:, metadata_store:, graph_store:, embedding_provider:) @vector_store = vector_store @metadata_store = @graph_store = graph_store @embedding_provider = end |
Instance Method Details
#execute(query:, classification:, limit: 20, type_filter: nil, strategy: nil) ⇒ ExecutionResult
Execute a search based on query classification.
71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
# File 'lib/woods/retrieval/search_executor.rb', line 71 def execute(query:, classification:, limit: 20, type_filter: nil, strategy: nil) strategy ||= select_strategy(classification) candidates = run_strategy( strategy, query: query, classification: classification, limit: limit, type_filter: type_filter ) ExecutionResult.new( candidates: candidates.first(limit), strategy: strategy, query: query ) end |