7979import com .couchbase .client .protocol .sdk .search .indexmanager .UpsertIndex ;
8080import com .couchbase .client .protocol .sdk .search .BlockingSearchResult ;
8181import com .couchbase .client .protocol .sdk .search .Location ;
82- import com .couchbase .client .protocol .sdk .search .Search ;
8382import com .couchbase .client .protocol .sdk .search .SearchFacetResult ;
8483import com .couchbase .client .protocol .sdk .search .SearchFacets ;
8584import com .couchbase .client .protocol .sdk .search .SearchFragments ;
8988import com .couchbase .client .protocol .shared .ContentAs ;
9089import com .couchbase .stream .ReactiveSearchResultStreamer ;
9190import com .couchbase .utils .ContentAsUtil ;
91+ import com .google .common .primitives .Floats ;
9292import com .google .protobuf .ByteString ;
9393import com .google .protobuf .Timestamp ;
9494import reactor .core .publisher .Mono ;
@@ -1439,6 +1439,41 @@ static AnalyzeDocumentOptions createOptions(AnalyzeDocument request, ConcurrentH
14391439 return out ;
14401440 }
14411441
1442+ // pre-processor doesn't support nested tags, so do this intricate dance
1443+ // [start:3.6.0]
1444+ private static VectorQuery toSdk (com .couchbase .client .protocol .sdk .search .VectorQuery fit ) {
1445+ // [end:3.6.0]
1446+
1447+ // [start:3.6.3]
1448+ if (fit .hasBase64VectorQuery ()) {
1449+ VectorQuery sdk = VectorQuery .create (fit .getVectorFieldName (), fit .getBase64VectorQuery ());
1450+ applyVectorQueryOptions (sdk , fit );
1451+ return sdk ;
1452+ }
1453+ // [end:3.6.3]
1454+
1455+ // [start:3.6.0]
1456+ var floats = Floats .toArray (fit .getVectorQueryList ());
1457+ VectorQuery sdk = VectorQuery .create (fit .getVectorFieldName (), floats );
1458+ applyVectorQueryOptions (sdk , fit );
1459+ return sdk ;
1460+ }
1461+ // [end:3.6.0]
1462+
1463+ // [start:3.6.0]
1464+ private static void applyVectorQueryOptions (VectorQuery sdk , com .couchbase .client .protocol .sdk .search .VectorQuery fit ) {
1465+ if (fit .hasOptions ()) {
1466+ var opts = fit .getOptions ();
1467+ if (opts .hasNumCandidates ()) {
1468+ sdk .numCandidates (opts .getNumCandidates ());
1469+ }
1470+ if (opts .hasBoost ()) {
1471+ sdk .boost (opts .getBoost ());
1472+ }
1473+ }
1474+ }
1475+ // [end:3.6.0]
1476+
14421477 // [start:3.6.0]
14431478 private static SearchRequest convertSearchRequest (com .couchbase .client .protocol .sdk .search .SearchRequest sr ) {
14441479 if (sr .hasSearchQuery ()) {
@@ -1456,23 +1491,7 @@ else if (sr.hasVectorSearch()) {
14561491
14571492 private static VectorSearch convertVectorSearch (com .couchbase .client .protocol .sdk .search .VectorSearch vs ) {
14581493 var vectors = vs .getVectorQueryList ().stream ()
1459- .map (v -> {
1460- var buffer = new float [v .getVectorQueryCount ()];
1461- for (int i = 0 ; i < v .getVectorQueryList ().size (); i ++) {
1462- buffer [i ] = v .getVectorQuery (i );
1463- }
1464- var out = VectorQuery .create (v .getVectorFieldName (), buffer );
1465- if (v .hasOptions ()) {
1466- var opts = v .getOptions ();
1467- if (opts .hasNumCandidates ()) {
1468- out = out .numCandidates (opts .getNumCandidates ());
1469- }
1470- if (opts .hasBoost ()) {
1471- out = out .boost (opts .getBoost ());
1472- }
1473- }
1474- return out ;
1475- })
1494+ .map (SearchHelper ::toSdk )
14761495 .toList ();
14771496 if (vs .hasOptions ()) {
14781497 return VectorSearch .create (vectors , convertVectorSearchOptions (vs .getOptions ()));
0 commit comments