From 391b901bbbded07c4b7dad7405f50433fb76be92 Mon Sep 17 00:00:00 2001 From: Dimitris Christodoulou Date: Wed, 11 Jun 2025 10:30:36 +0100 Subject: [PATCH 1/3] RCBC-517: Support vector search prefilter --- lib/couchbase/search_options.rb | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/lib/couchbase/search_options.rb b/lib/couchbase/search_options.rb index d8132790..43807be2 100644 --- a/lib/couchbase/search_options.rb +++ b/lib/couchbase/search_options.rb @@ -321,8 +321,8 @@ def to_h # @yieldparam [BooleanFieldQuery] query # # @return [BooleanFieldQuery] - def self.boolean_field(value) - BooleanFieldQuery.new(value) + def self.boolean_field(value, &) + BooleanFieldQuery.new(value, &) end # Allow to match `true`/`false` in a field mapped as boolean. @@ -1073,6 +1073,9 @@ class VectorQuery # @return [Float, nil] attr_accessor :boost + # @return [SearchQuery, nil] + attr_accessor :prefilter + # Constructs a +VectorQuery+ instance # # @overload initialize(vector_field_name, vector_query) @@ -1109,6 +1112,7 @@ def to_h vector_base64: @base64_vector_query, k: num_candidates || 3, boost: boost, + filter: prefilter.to_h }.compact raise Error::InvalidArgument, "The vector cannot be nil" if !h.include?(:vector) && !h.include?(:vector_base64) From 0a7626638298313cb0dbf61d16f87eda94492441 Mon Sep 17 00:00:00 2001 From: Dimitris Christodoulou Date: Wed, 11 Jun 2025 17:42:57 +0100 Subject: [PATCH 2/3] Fix rubocop failure --- lib/couchbase/search_options.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/couchbase/search_options.rb b/lib/couchbase/search_options.rb index 43807be2..6cd46c25 100644 --- a/lib/couchbase/search_options.rb +++ b/lib/couchbase/search_options.rb @@ -1112,7 +1112,7 @@ def to_h vector_base64: @base64_vector_query, k: num_candidates || 3, boost: boost, - filter: prefilter.to_h + filter: prefilter.to_h, }.compact raise Error::InvalidArgument, "The vector cannot be nil" if !h.include?(:vector) && !h.include?(:vector_base64) From 281eba5f5afcf0510ad0be8532aca3875a20b45e Mon Sep 17 00:00:00 2001 From: Dimitris Christodoulou Date: Thu, 12 Jun 2025 15:37:53 +0100 Subject: [PATCH 3/3] Only set filter if it's not nil --- lib/couchbase/search_options.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/couchbase/search_options.rb b/lib/couchbase/search_options.rb index 6cd46c25..6c5df820 100644 --- a/lib/couchbase/search_options.rb +++ b/lib/couchbase/search_options.rb @@ -1112,9 +1112,10 @@ def to_h vector_base64: @base64_vector_query, k: num_candidates || 3, boost: boost, - filter: prefilter.to_h, }.compact + h[:filter] = prefilter.to_h unless prefilter.nil? + raise Error::InvalidArgument, "The vector cannot be nil" if !h.include?(:vector) && !h.include?(:vector_base64) raise Error::InvalidArgument, "The vector query cannot be an empty array" if h.include?(:vector) && h[:vector].empty?