Module: ParadeDB::Model::ClassMethods
- Defined in:
- lib/parade_db/model.rb
Instance Method Summary collapse
- #aggregate_by(*group_fields, exact: nil, **named_aggregations) ⇒ Object
- #cosine_distance(column, vector) ⇒ Object
- #facets(*fields, **opts) ⇒ Object
- #facets_agg(**named_aggregations) ⇒ Object
- #inner_product(column, vector) ⇒ Object
- #l2_distance(column, vector) ⇒ Object
- #more_like_this(key, fields: nil, **options) ⇒ Object
- #nearest(column, vector, metric: nil) ⇒ Object
- #paradedb_index(index_class) ⇒ Object
- #paradedb_index_class ⇒ Object
- #paradedb_index_classes ⇒ Object
- #paradedb_index_name ⇒ Object
- #paradedb_indexed_fields ⇒ Object
- #paradedb_key_field ⇒ Object
- #paradedb_search(column) ⇒ Object
- #paradedb_validate_index! ⇒ Object
- #with_agg(**named_aggregations) ⇒ Object
- #with_facets(*fields, **opts) ⇒ Object
Instance Method Details
#aggregate_by(*group_fields, exact: nil, **named_aggregations) ⇒ Object
118 119 120 121 122 123 124 125 126 |
# File 'lib/parade_db/model.rb', line 118 def aggregate_by(*group_fields, exact: nil, **named_aggregations) ensure_postgres! paradedb_validate_index! all.extending(SearchMethods).aggregate_by( *group_fields, exact: exact, **named_aggregations ) end |
#cosine_distance(column, vector) ⇒ Object
84 85 86 87 |
# File 'lib/parade_db/model.rb', line 84 def cosine_distance(column, vector) ensure_postgres! QueryBuilder.new(table_name).vector_distance(column, vector, metric: :cosine) end |
#facets(*fields, **opts) ⇒ Object
100 101 102 103 104 |
# File 'lib/parade_db/model.rb', line 100 def facets(*fields, **opts) ensure_postgres! paradedb_validate_index! all.extending(SearchMethods).facets(*fields, **opts) end |
#facets_agg(**named_aggregations) ⇒ Object
112 113 114 115 116 |
# File 'lib/parade_db/model.rb', line 112 def facets_agg(**named_aggregations) ensure_postgres! paradedb_validate_index! all.extending(SearchMethods).facets_agg(**named_aggregations) end |
#inner_product(column, vector) ⇒ Object
89 90 91 92 |
# File 'lib/parade_db/model.rb', line 89 def inner_product(column, vector) ensure_postgres! QueryBuilder.new(table_name).vector_distance(column, vector, metric: :ip) end |
#l2_distance(column, vector) ⇒ Object
79 80 81 82 |
# File 'lib/parade_db/model.rb', line 79 def l2_distance(column, vector) ensure_postgres! QueryBuilder.new(table_name).vector_distance(column, vector, metric: :l2) end |
#more_like_this(key, fields: nil, **options) ⇒ Object
67 68 69 70 71 |
# File 'lib/parade_db/model.rb', line 67 def more_like_this(key, fields: nil, **) ensure_postgres! paradedb_validate_index! all.extending(SearchMethods).more_like_this(key, fields: fields, **) end |
#nearest(column, vector, metric: nil) ⇒ Object
73 74 75 76 77 |
# File 'lib/parade_db/model.rb', line 73 def nearest(column, vector, metric: nil) ensure_postgres! paradedb_validate_index! all.extending(SearchMethods).nearest(column, vector, metric: metric) end |
#paradedb_index(index_class) ⇒ Object
128 129 130 131 132 133 134 |
# File 'lib/parade_db/model.rb', line 128 def paradedb_index(index_class) @paradedb_explicit_index_classes ||= [] @paradedb_explicit_index_classes << index_class unless @paradedb_explicit_index_classes.include?(index_class) remove_instance_variable(:@paradedb_index_class) if instance_variable_defined?(:@paradedb_index_class) remove_instance_variable(:@paradedb_index_definition) if instance_variable_defined?(:@paradedb_index_definition) index_class end |
#paradedb_index_class ⇒ Object
145 146 147 148 149 |
# File 'lib/parade_db/model.rb', line 145 def paradedb_index_class return @paradedb_index_class if instance_variable_defined?(:@paradedb_index_class) @paradedb_index_class = paradedb_index_classes.first end |
#paradedb_index_classes ⇒ Object
136 137 138 139 140 141 142 143 |
# File 'lib/parade_db/model.rb', line 136 def paradedb_index_classes if instance_variable_defined?(:@paradedb_explicit_index_classes) && !@paradedb_explicit_index_classes.empty? @paradedb_explicit_index_classes.dup else klass = resolve_paradedb_index_class klass ? [klass] : [] end end |
#paradedb_index_name ⇒ Object
163 164 165 166 |
# File 'lib/parade_db/model.rb', line 163 def paradedb_index_name definition = paradedb_index_definition definition&.index_name end |
#paradedb_indexed_fields ⇒ Object
151 152 153 154 155 156 |
# File 'lib/parade_db/model.rb', line 151 def paradedb_indexed_fields definition = paradedb_index_definition return [] if definition.nil? definition.entries.map(&:query_key).uniq end |
#paradedb_key_field ⇒ Object
158 159 160 161 |
# File 'lib/parade_db/model.rb', line 158 def paradedb_key_field definition = paradedb_index_definition definition&.key_field end |
#paradedb_search(column) ⇒ Object
62 63 64 65 |
# File 'lib/parade_db/model.rb', line 62 def paradedb_search(column) ensure_postgres! all.extending(SearchMethods).search(column) end |
#paradedb_validate_index! ⇒ Object
168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 |
# File 'lib/parade_db/model.rb', line 168 def paradedb_validate_index! return true if ParadeDB.index_validation_mode == :off classes = paradedb_index_classes return true if classes.empty? all_valid = true classes.each do |klass| definition = klass.compiled_definition next if paradedb_catalog_index_valid?(definition) all_valid = false = "ParadeDB index drift detected for #{name}: expected #{definition.index_name} on #{definition.table_name} with a ParadeDB access method." case ParadeDB.index_validation_mode when :warn paradedb_log_warn() when :raise raise ParadeDB::IndexDriftError, end end all_valid end |
#with_agg(**named_aggregations) ⇒ Object
106 107 108 109 110 |
# File 'lib/parade_db/model.rb', line 106 def with_agg(**named_aggregations) ensure_postgres! paradedb_validate_index! all.extending(SearchMethods).with_agg(**named_aggregations) end |
#with_facets(*fields, **opts) ⇒ Object
94 95 96 97 98 |
# File 'lib/parade_db/model.rb', line 94 def with_facets(*fields, **opts) ensure_postgres! paradedb_validate_index! all.extending(SearchMethods).with_facets(*fields, **opts) end |