Class: KairosMcp::VectorSearch::FallbackSearch

Inherits:
Base
  • Object
show all
Defined in:
lib/kairos_mcp/vector_search/fallback_search.rb

Overview

Fallback search implementation using regex matching

Used when hnswlib/informers gems are not installed. Provides basic keyword matching without semantic understanding.

Instance Method Summary collapse

Constructor Details

#initializeFallbackSearch

Returns a new instance of FallbackSearch.



13
14
15
16
# File 'lib/kairos_mcp/vector_search/fallback_search.rb', line 13

def initialize
  @documents = {}
  @ready = true
end

Instance Method Details

#add(id, text, metadata: {}) ⇒ Object



18
19
20
21
22
23
24
25
# File 'lib/kairos_mcp/vector_search/fallback_search.rb', line 18

def add(id, text, metadata: {})
  @documents[id.to_s] = {
    text: text.to_s.downcase,
    original_text: text.to_s,
    metadata: 
  }
  true
end

#countObject



71
72
73
# File 'lib/kairos_mcp/vector_search/fallback_search.rb', line 71

def count
  @documents.size
end

#loadObject



62
63
64
65
# File 'lib/kairos_mcp/vector_search/fallback_search.rb', line 62

def load
  # Fallback search doesn't persist
  true
end

#ready?Boolean

Returns:

  • (Boolean)


67
68
69
# File 'lib/kairos_mcp/vector_search/fallback_search.rb', line 67

def ready?
  @ready
end

#rebuild(documents) ⇒ Object



49
50
51
52
53
54
55
# File 'lib/kairos_mcp/vector_search/fallback_search.rb', line 49

def rebuild(documents)
  @documents.clear
  documents.each do |doc|
    add(doc[:id], doc[:text], metadata: doc[:metadata] || {})
  end
  true
end

#remove(id) ⇒ Object



27
28
29
30
# File 'lib/kairos_mcp/vector_search/fallback_search.rb', line 27

def remove(id)
  @documents.delete(id.to_s)
  true
end

#saveObject



57
58
59
60
# File 'lib/kairos_mcp/vector_search/fallback_search.rb', line 57

def save
  # Fallback search doesn't persist - documents are rebuilt on startup
  true
end

#search(query, k: 5) ⇒ Object



32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/kairos_mcp/vector_search/fallback_search.rb', line 32

def search(query, k: 5)
  return [] if @documents.empty?

  query_terms = tokenize(query.to_s.downcase)
  return [] if query_terms.empty?

  scored = @documents.map do |id, doc|
    score = calculate_score(query_terms, doc[:text])
    { id: id, score: score, metadata: doc[:metadata] }
  end

  scored
    .select { |r| r[:score] > 0 }
    .sort_by { |r| -r[:score] }
    .first(k)
end

#semantic?Boolean

Returns:

  • (Boolean)


75
76
77
# File 'lib/kairos_mcp/vector_search/fallback_search.rb', line 75

def semantic?
  false
end