Module: ParadeDB::Model::ClassMethods
- Defined in:
- lib/parade_db/model.rb
Instance Method Summary collapse
- #aggregate_by(*group_fields, exact: nil, **named_aggregations) ⇒ Object
- #facets(*fields, **opts) ⇒ Object
- #facets_agg(**named_aggregations) ⇒ Object
- #more_like_this(key, fields: nil, **options) ⇒ Object
- #nearest(column, vector, metric: nil) ⇒ Object
- #paradedb_arel ⇒ 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
101 102 103 104 105 106 107 108 109 |
# File 'lib/parade_db/model.rb', line 101 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 |
#facets(*fields, **opts) ⇒ Object
83 84 85 86 87 |
# File 'lib/parade_db/model.rb', line 83 def facets(*fields, **opts) ensure_postgres! paradedb_validate_index! all.extending(SearchMethods).facets(*fields, **opts) end |
#facets_agg(**named_aggregations) ⇒ Object
95 96 97 98 99 |
# File 'lib/parade_db/model.rb', line 95 def facets_agg(**named_aggregations) ensure_postgres! paradedb_validate_index! all.extending(SearchMethods).facets_agg(**named_aggregations) end |
#more_like_this(key, fields: nil, **options) ⇒ Object
65 66 67 68 69 |
# File 'lib/parade_db/model.rb', line 65 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
71 72 73 74 75 |
# File 'lib/parade_db/model.rb', line 71 def nearest(column, vector, metric: nil) ensure_postgres! paradedb_validate_index! all.extending(SearchMethods).nearest(column, vector, metric: metric) end |
#paradedb_arel ⇒ Object
111 112 113 114 |
# File 'lib/parade_db/model.rb', line 111 def paradedb_arel ensure_postgres! @paradedb_arel ||= ParadeDB::Arel::Builder.new(table_name) end |
#paradedb_index(index_class) ⇒ Object
116 117 118 119 120 121 122 |
# File 'lib/parade_db/model.rb', line 116 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
133 134 135 136 137 |
# File 'lib/parade_db/model.rb', line 133 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
124 125 126 127 128 129 130 131 |
# File 'lib/parade_db/model.rb', line 124 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
151 152 153 154 |
# File 'lib/parade_db/model.rb', line 151 def paradedb_index_name definition = paradedb_index_definition definition&.index_name end |
#paradedb_indexed_fields ⇒ Object
139 140 141 142 143 144 |
# File 'lib/parade_db/model.rb', line 139 def paradedb_indexed_fields definition = paradedb_index_definition return [] if definition.nil? definition.entries.map(&:query_key).uniq end |
#paradedb_key_field ⇒ Object
146 147 148 149 |
# File 'lib/parade_db/model.rb', line 146 def paradedb_key_field definition = paradedb_index_definition definition&.key_field end |
#paradedb_search(column) ⇒ Object
60 61 62 63 |
# File 'lib/parade_db/model.rb', line 60 def paradedb_search(column) ensure_postgres! all.extending(SearchMethods).search(column) end |
#paradedb_validate_index! ⇒ Object
156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 |
# File 'lib/parade_db/model.rb', line 156 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
89 90 91 92 93 |
# File 'lib/parade_db/model.rb', line 89 def with_agg(**named_aggregations) ensure_postgres! paradedb_validate_index! all.extending(SearchMethods).with_agg(**named_aggregations) end |
#with_facets(*fields, **opts) ⇒ Object
77 78 79 80 81 |
# File 'lib/parade_db/model.rb', line 77 def with_facets(*fields, **opts) ensure_postgres! paradedb_validate_index! all.extending(SearchMethods).with_facets(*fields, **opts) end |