Class: Zvec::VectorQuery
- Inherits:
-
Object
- Object
- Zvec::VectorQuery
- Defined in:
- lib/zvec/query.rb
Overview
Represents a vector similarity search query.
Filter Expression Syntax
Filters narrow search results using scalar field conditions. The syntax supports the following operators and combinators:
Comparison Operators
field == value # equality
field != value # inequality
field > value # greater than
field >= value # greater than or equal
field < value # less than
field <= value # less than or equal
Logical Operators
expr AND expr # both conditions must match
expr OR expr # either condition matches
NOT expr # negation
(expr) # grouping
Set / Range Operators
field IN [v1, v2] # field equals any value in the list
field NOT IN [v1] # field does not equal any value in the list
String Operators
field LIKE "pattern" # SQL-style LIKE with % and _ wildcards
Examples
"year > 2024"
"year >= 2020 AND year <= 2025"
"category IN ['science', 'tech']"
"title LIKE '%Ruby%'"
"active == true AND rating > 4.0"
"(year > 2020 OR featured == true) AND active == true"
Instance Attribute Summary collapse
-
#ext_query ⇒ Ext::VectorQuery
readonly
The underlying C++ query object.
Instance Method Summary collapse
-
#initialize(field_name:, vector:, topk: 10, filter: nil, include_vector: false, output_fields: nil, query_params: nil) ⇒ VectorQuery
constructor
Create a new vector similarity query.
Constructor Details
#initialize(field_name:, vector:, topk: 10, filter: nil, include_vector: false, output_fields: nil, query_params: nil) ⇒ VectorQuery
Create a new vector similarity query.
96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 |
# File 'lib/zvec/query.rb', line 96 def initialize(field_name:, vector:, topk: 10, filter: nil, include_vector: false, output_fields: nil, query_params: nil) if field_name.nil? || field_name.to_s.strip.empty? raise QueryError, "field_name must be a non-empty string" end unless vector.is_a?(Array) && !vector.empty? raise QueryError, "vector must be a non-empty Array" end unless topk.is_a?(Integer) && topk > 0 raise QueryError, "topk must be a positive integer" end # Validate all vector elements are numeric vector.each_with_index do |v, i| unless v.is_a?(Numeric) raise QueryError, "Query vector contains non-numeric element at index #{i}: #{v.inspect}" end end @ext_query = Ext::VectorQuery.new @ext_query.field_name = field_name.to_s @ext_query.topk = topk @ext_query.set_query_vector(vector.map(&:to_f)) @ext_query.filter = filter if filter @ext_query.include_vector = include_vector @ext_query.set_output_fields(output_fields.map(&:to_s)) if output_fields if query_params case query_params when Ext::HnswQueryParams @ext_query.set_hnsw_query_params(query_params) when Ext::IVFQueryParams @ext_query.set_ivf_query_params(query_params) when Ext::FlatQueryParams @ext_query.set_flat_query_params(query_params) else raise QueryError, "Unknown query_params type: #{query_params.class}" end end end |
Instance Attribute Details
#ext_query ⇒ Ext::VectorQuery (readonly)
Returns the underlying C++ query object.
68 69 70 |
# File 'lib/zvec/query.rb', line 68 def ext_query @ext_query end |