/AWS1/IF_DYN=>SEARCHVECTORS()¶
About SearchVectors¶
Performs a vector similarity search on a vector index associated with an Amazon DynamoDB table, and returns the most similar items sorted by similarity score based on the distance function configured for the index.
Score interpretation depends on the distance function:
-
COSINE- Returns the items with the k smallest scores. Scores range from 0 (identical) to 2 (opposite). Lower scores indicate higher similarity. -
EUCLIDEAN- Returns the items with the k smallest scores. Scores represent the Euclidean distance between vectors. Lower scores indicate higher similarity. -
DOT_PRODUCT- Returns the items with the k highest scores. Higher scores indicate higher similarity.
Method Signature¶
METHODS /AWS1/IF_DYN~SEARCHVECTORS
IMPORTING
!IV_TABLENAME TYPE /AWS1/DYNTABLEARN OPTIONAL
!IV_INDEXNAME TYPE /AWS1/DYNINDEXNAME OPTIONAL
!IV_RETURNCONSUMEDCAPACITY TYPE /AWS1/DYNRETURNCONSUMEDCAP OPTIONAL
!IT_EXPRESSIONATTRIBUTENAMES TYPE /AWS1/CL_DYNXPRSNATTRNAMEMAP_W=>TT_EXPRESSIONATTRIBUTENAMEMAP OPTIONAL
!IT_EXPRESSIONATTRIBUTEVALUES TYPE /AWS1/CL_DYNATTRIBUTEVALUE=>TT_EXPRESSIONATTRIBUTEVALUEMAP OPTIONAL
!IV_PROJECTIONEXPRESSION TYPE /AWS1/DYNPROJECTIONEXPRESSION OPTIONAL
!IT_SEARCHVECTOR TYPE /AWS1/CL_DYNATTRIBUTEVALUE=>TT_SEARCHVECTORLIST OPTIONAL
!IV_SEARCHCONDITIONEXPRESSION TYPE /AWS1/DYNSTRING OPTIONAL
!IV_TOPK TYPE /AWS1/DYNTOPKINTEGER OPTIONAL
RETURNING
VALUE(OO_OUTPUT) TYPE REF TO /aws1/cl_dynsrchvectorsoutput
RAISING
/AWS1/CX_DYNINTERNALSERVERERR
/AWS1/CX_DYNREQUESTLIMITEXCD
/AWS1/CX_DYNRESOURCENOTFOUNDEX
/AWS1/CX_DYNTHROTTLINGEX
/AWS1/CX_DYNCLIENTEXC
/AWS1/CX_DYNSERVEREXC
/AWS1/CX_RT_TECHNICAL_GENERIC
/AWS1/CX_RT_SERVICE_GENERIC.
IMPORTING¶
Required arguments:¶
iv_tablename TYPE /AWS1/DYNTABLEARN /AWS1/DYNTABLEARN¶
The name or Amazon Resource Name (ARN) of the table containing the vector index.
iv_indexname TYPE /AWS1/DYNINDEXNAME /AWS1/DYNINDEXNAME¶
The name of the vector index to search. The index must be in the
ACTIVEstate.
it_searchvector TYPE /AWS1/CL_DYNATTRIBUTEVALUE=>TT_SEARCHVECTORLIST TT_SEARCHVECTORLIST¶
The search vector to compare against the indexed vectors. Each element is a 32-bit IEEE-754 floating point number, provided in DynamoDB list format.
The number of dimensions must match the number of dimensions configured for the vector index.
iv_topk TYPE /AWS1/DYNTOPKINTEGER /AWS1/DYNTOPKINTEGER¶
The number of most similar results to return.
Optional arguments:¶
iv_returnconsumedcapacity TYPE /AWS1/DYNRETURNCONSUMEDCAP /AWS1/DYNRETURNCONSUMEDCAP¶
Determines the level of detail about either provisioned or on-demand throughput consumption that is returned in the response:
INDEXES- The response includes the aggregateConsumedCapacityfor the operation, together withConsumedCapacityfor each table and secondary index that was accessed.Note that some operations, such as
GetItemandBatchGetItem, do not access any indexes at all. In these cases, specifyingINDEXESwill only returnConsumedCapacityinformation for table(s).
TOTAL- The response includes only the aggregateConsumedCapacityfor the operation.
NONE- NoConsumedCapacitydetails are included in the response.
it_expressionattributenames TYPE /AWS1/CL_DYNXPRSNATTRNAMEMAP_W=>TT_EXPRESSIONATTRIBUTENAMEMAP TT_EXPRESSIONATTRIBUTENAMEMAP¶
One or more substitution tokens for attribute names in an expression. Use the
#character in an expression to dereference an attribute name.
it_expressionattributevalues TYPE /AWS1/CL_DYNATTRIBUTEVALUE=>TT_EXPRESSIONATTRIBUTEVALUEMAP TT_EXPRESSIONATTRIBUTEVALUEMAP¶
One or more values that can be substituted in an expression. Use the
:character in an expression to dereference an attribute value.
iv_projectionexpression TYPE /AWS1/DYNPROJECTIONEXPRESSION /AWS1/DYNPROJECTIONEXPRESSION¶
A string that identifies one or more attributes to retrieve from the index. Separate attribute names with commas. If not specified, the operation returns all attributes projected into the vector index.
Only attributes projected into the vector index can be retrieved.
iv_searchconditionexpression TYPE /AWS1/DYNSTRING /AWS1/DYNSTRING¶
A condition expression used to filter the vector search results. The expression can reference attributes defined in the vector index search schema, including
HASHandINLINE_FILTERkey elements.Only the equality operator (
=) is supported forHASHattributes. Comparison and range operators are supported forINLINE_FILTERattributes. Only top-level attributes from the search schema can be referenced.
RETURNING¶
oo_output TYPE REF TO /aws1/cl_dynsrchvectorsoutput /AWS1/CL_DYNSRCHVECTORSOUTPUT¶
Examples¶
Syntax Example¶
This is an example of the syntax for calling the method. It includes every possible argument and initializes every possible value. The data provided is not necessarily semantically accurate (for example the value "string" may be provided for something that is intended to be an instance ID, or in some cases two arguments may be mutually exclusive). The syntax shows the ABAP syntax for creating the various data structures.
DATA(lo_result) = lo_client->searchvectors(
it_expressionattributenames = VALUE /aws1/cl_dynxprsnattrnamemap_w=>tt_expressionattributenamemap(
(
VALUE /aws1/cl_dynxprsnattrnamemap_w=>ts_xprsnattrnamemap_maprow(
key = |string|
value = new /aws1/cl_dynxprsnattrnamemap_w( |string| )
)
)
)
it_expressionattributevalues = VALUE /aws1/cl_dynattributevalue=>tt_expressionattributevaluemap(
(
VALUE /aws1/cl_dynattributevalue=>ts_xprsnattrvaluemap_maprow(
key = |string|
value = new /aws1/cl_dynattributevalue(
it_bs = VALUE /aws1/cl_dynbinarysetattrval_w=>tt_binarysetattributevalue(
( new /aws1/cl_dynbinarysetattrval_w( '5347567362473873563239796247513D' ) )
)
it_l = VALUE /aws1/cl_dynattributevalue=>tt_listattributevalue(
(
new /aws1/cl_dynattributevalue(
it_bs = VALUE /aws1/cl_dynbinarysetattrval_w=>tt_binarysetattributevalue(
( new /aws1/cl_dynbinarysetattrval_w( '5347567362473873563239796247513D' ) )
)
it_m = VALUE /aws1/cl_dynattributevalue=>tt_mapattributevalue(
(
VALUE /aws1/cl_dynattributevalue=>ts_mapattributevalue_maprow(
key = |string|
value = new /aws1/cl_dynattributevalue(
it_bs = VALUE /aws1/cl_dynbinarysetattrval_w=>tt_binarysetattributevalue(
( new /aws1/cl_dynbinarysetattrval_w( '5347567362473873563239796247513D' ) )
)
it_ns = VALUE /aws1/cl_dynnumsetattrvalue_w=>tt_numbersetattributevalue(
( new /aws1/cl_dynnumsetattrvalue_w( |string| ) )
)
it_ss = VALUE /aws1/cl_dynstrsetattrvalue_w=>tt_stringsetattributevalue(
( new /aws1/cl_dynstrsetattrvalue_w( |string| ) )
)
iv_b = '5347567362473873563239796247513D'
iv_bool = ABAP_TRUE
iv_n = |string|
iv_null = ABAP_TRUE
iv_s = |string|
)
)
)
)
it_ns = VALUE /aws1/cl_dynnumsetattrvalue_w=>tt_numbersetattributevalue(
( new /aws1/cl_dynnumsetattrvalue_w( |string| ) )
)
it_ss = VALUE /aws1/cl_dynstrsetattrvalue_w=>tt_stringsetattributevalue(
( new /aws1/cl_dynstrsetattrvalue_w( |string| ) )
)
iv_b = '5347567362473873563239796247513D'
iv_bool = ABAP_TRUE
iv_n = |string|
iv_null = ABAP_TRUE
iv_s = |string|
)
)
)
it_m = VALUE /aws1/cl_dynattributevalue=>tt_mapattributevalue(
(
VALUE /aws1/cl_dynattributevalue=>ts_mapattributevalue_maprow(
key = |string|
value = new /aws1/cl_dynattributevalue(
it_bs = VALUE /aws1/cl_dynbinarysetattrval_w=>tt_binarysetattributevalue(
( new /aws1/cl_dynbinarysetattrval_w( '5347567362473873563239796247513D' ) )
)
it_l = VALUE /aws1/cl_dynattributevalue=>tt_listattributevalue(
(
new /aws1/cl_dynattributevalue(
it_bs = VALUE /aws1/cl_dynbinarysetattrval_w=>tt_binarysetattributevalue(
( new /aws1/cl_dynbinarysetattrval_w( '5347567362473873563239796247513D' ) )
)
it_ns = VALUE /aws1/cl_dynnumsetattrvalue_w=>tt_numbersetattributevalue(
( new /aws1/cl_dynnumsetattrvalue_w( |string| ) )
)
it_ss = VALUE /aws1/cl_dynstrsetattrvalue_w=>tt_stringsetattributevalue(
( new /aws1/cl_dynstrsetattrvalue_w( |string| ) )
)
iv_b = '5347567362473873563239796247513D'
iv_bool = ABAP_TRUE
iv_n = |string|
iv_null = ABAP_TRUE
iv_s = |string|
)
)
)
it_ns = VALUE /aws1/cl_dynnumsetattrvalue_w=>tt_numbersetattributevalue(
( new /aws1/cl_dynnumsetattrvalue_w( |string| ) )
)
it_ss = VALUE /aws1/cl_dynstrsetattrvalue_w=>tt_stringsetattributevalue(
( new /aws1/cl_dynstrsetattrvalue_w( |string| ) )
)
iv_b = '5347567362473873563239796247513D'
iv_bool = ABAP_TRUE
iv_n = |string|
iv_null = ABAP_TRUE
iv_s = |string|
)
)
)
)
it_ns = VALUE /aws1/cl_dynnumsetattrvalue_w=>tt_numbersetattributevalue(
( new /aws1/cl_dynnumsetattrvalue_w( |string| ) )
)
it_ss = VALUE /aws1/cl_dynstrsetattrvalue_w=>tt_stringsetattributevalue(
( new /aws1/cl_dynstrsetattrvalue_w( |string| ) )
)
iv_b = '5347567362473873563239796247513D'
iv_bool = ABAP_TRUE
iv_n = |string|
iv_null = ABAP_TRUE
iv_s = |string|
)
)
)
)
it_searchvector = VALUE /aws1/cl_dynattributevalue=>tt_searchvectorlist(
(
new /aws1/cl_dynattributevalue(
it_bs = VALUE /aws1/cl_dynbinarysetattrval_w=>tt_binarysetattributevalue(
( new /aws1/cl_dynbinarysetattrval_w( '5347567362473873563239796247513D' ) )
)
it_l = VALUE /aws1/cl_dynattributevalue=>tt_listattributevalue(
(
new /aws1/cl_dynattributevalue(
it_bs = VALUE /aws1/cl_dynbinarysetattrval_w=>tt_binarysetattributevalue(
( new /aws1/cl_dynbinarysetattrval_w( '5347567362473873563239796247513D' ) )
)
it_m = VALUE /aws1/cl_dynattributevalue=>tt_mapattributevalue(
(
VALUE /aws1/cl_dynattributevalue=>ts_mapattributevalue_maprow(
key = |string|
value = new /aws1/cl_dynattributevalue(
it_bs = VALUE /aws1/cl_dynbinarysetattrval_w=>tt_binarysetattributevalue(
( new /aws1/cl_dynbinarysetattrval_w( '5347567362473873563239796247513D' ) )
)
it_ns = VALUE /aws1/cl_dynnumsetattrvalue_w=>tt_numbersetattributevalue(
( new /aws1/cl_dynnumsetattrvalue_w( |string| ) )
)
it_ss = VALUE /aws1/cl_dynstrsetattrvalue_w=>tt_stringsetattributevalue(
( new /aws1/cl_dynstrsetattrvalue_w( |string| ) )
)
iv_b = '5347567362473873563239796247513D'
iv_bool = ABAP_TRUE
iv_n = |string|
iv_null = ABAP_TRUE
iv_s = |string|
)
)
)
)
it_ns = VALUE /aws1/cl_dynnumsetattrvalue_w=>tt_numbersetattributevalue(
( new /aws1/cl_dynnumsetattrvalue_w( |string| ) )
)
it_ss = VALUE /aws1/cl_dynstrsetattrvalue_w=>tt_stringsetattributevalue(
( new /aws1/cl_dynstrsetattrvalue_w( |string| ) )
)
iv_b = '5347567362473873563239796247513D'
iv_bool = ABAP_TRUE
iv_n = |string|
iv_null = ABAP_TRUE
iv_s = |string|
)
)
)
it_m = VALUE /aws1/cl_dynattributevalue=>tt_mapattributevalue(
(
VALUE /aws1/cl_dynattributevalue=>ts_mapattributevalue_maprow(
key = |string|
value = new /aws1/cl_dynattributevalue(
it_bs = VALUE /aws1/cl_dynbinarysetattrval_w=>tt_binarysetattributevalue(
( new /aws1/cl_dynbinarysetattrval_w( '5347567362473873563239796247513D' ) )
)
it_l = VALUE /aws1/cl_dynattributevalue=>tt_listattributevalue(
(
new /aws1/cl_dynattributevalue(
it_bs = VALUE /aws1/cl_dynbinarysetattrval_w=>tt_binarysetattributevalue(
( new /aws1/cl_dynbinarysetattrval_w( '5347567362473873563239796247513D' ) )
)
it_ns = VALUE /aws1/cl_dynnumsetattrvalue_w=>tt_numbersetattributevalue(
( new /aws1/cl_dynnumsetattrvalue_w( |string| ) )
)
it_ss = VALUE /aws1/cl_dynstrsetattrvalue_w=>tt_stringsetattributevalue(
( new /aws1/cl_dynstrsetattrvalue_w( |string| ) )
)
iv_b = '5347567362473873563239796247513D'
iv_bool = ABAP_TRUE
iv_n = |string|
iv_null = ABAP_TRUE
iv_s = |string|
)
)
)
it_ns = VALUE /aws1/cl_dynnumsetattrvalue_w=>tt_numbersetattributevalue(
( new /aws1/cl_dynnumsetattrvalue_w( |string| ) )
)
it_ss = VALUE /aws1/cl_dynstrsetattrvalue_w=>tt_stringsetattributevalue(
( new /aws1/cl_dynstrsetattrvalue_w( |string| ) )
)
iv_b = '5347567362473873563239796247513D'
iv_bool = ABAP_TRUE
iv_n = |string|
iv_null = ABAP_TRUE
iv_s = |string|
)
)
)
)
it_ns = VALUE /aws1/cl_dynnumsetattrvalue_w=>tt_numbersetattributevalue(
( new /aws1/cl_dynnumsetattrvalue_w( |string| ) )
)
it_ss = VALUE /aws1/cl_dynstrsetattrvalue_w=>tt_stringsetattributevalue(
( new /aws1/cl_dynstrsetattrvalue_w( |string| ) )
)
iv_b = '5347567362473873563239796247513D'
iv_bool = ABAP_TRUE
iv_n = |string|
iv_null = ABAP_TRUE
iv_s = |string|
)
)
)
iv_indexname = |string|
iv_projectionexpression = |string|
iv_returnconsumedcapacity = |string|
iv_searchconditionexpression = |string|
iv_tablename = |string|
iv_topk = 123
).
This is an example of reading all possible response values
lo_result = lo_result.
IF lo_result IS NOT INITIAL.
lo_vectorcapacity = lo_result->get_consumedcapacity( ).
IF lo_vectorcapacity IS NOT INITIAL.
lv_consumedcapacityunits = lo_vectorcapacity->get_vectorsearchrequestbytes( ).
lv_consumedcapacityunits = lo_vectorcapacity->get_vectorwriterequestbytes( ).
ENDIF.
LOOP AT lo_result->get_searchresults( ) into lo_row.
lo_row_1 = lo_row.
IF lo_row_1 IS NOT INITIAL.
LOOP AT lo_row_1->get_item( ) into ls_row_2.
lv_key = ls_row_2-key.
lo_value = ls_row_2-value.
IF lo_value IS NOT INITIAL.
lv_stringattributevalue = lo_value->get_s( ).
lv_numberattributevalue = lo_value->get_n( ).
lv_binaryattributevalue = lo_value->get_b( ).
LOOP AT lo_value->get_ss( ) into lo_row_3.
lo_row_4 = lo_row_3.
IF lo_row_4 IS NOT INITIAL.
lv_stringattributevalue = lo_row_4->get_value( ).
ENDIF.
ENDLOOP.
LOOP AT lo_value->get_ns( ) into lo_row_5.
lo_row_6 = lo_row_5.
IF lo_row_6 IS NOT INITIAL.
lv_numberattributevalue = lo_row_6->get_value( ).
ENDIF.
ENDLOOP.
LOOP AT lo_value->get_bs( ) into lo_row_7.
lo_row_8 = lo_row_7.
IF lo_row_8 IS NOT INITIAL.
lv_binaryattributevalue = lo_row_8->get_value( ).
ENDIF.
ENDLOOP.
LOOP AT lo_value->get_m( ) into ls_row_9.
lv_key = ls_row_9-key.
lo_value_1 = ls_row_9-value.
IF lo_value_1 IS NOT INITIAL.
lv_stringattributevalue = lo_value_1->get_s( ).
lv_numberattributevalue = lo_value_1->get_n( ).
lv_binaryattributevalue = lo_value_1->get_b( ).
LOOP AT lo_value_1->get_ss( ) into lo_row_3.
lo_row_4 = lo_row_3.
IF lo_row_4 IS NOT INITIAL.
lv_stringattributevalue = lo_row_4->get_value( ).
ENDIF.
ENDLOOP.
LOOP AT lo_value_1->get_ns( ) into lo_row_5.
lo_row_6 = lo_row_5.
IF lo_row_6 IS NOT INITIAL.
lv_numberattributevalue = lo_row_6->get_value( ).
ENDIF.
ENDLOOP.
LOOP AT lo_value_1->get_bs( ) into lo_row_7.
lo_row_8 = lo_row_7.
IF lo_row_8 IS NOT INITIAL.
lv_binaryattributevalue = lo_row_8->get_value( ).
ENDIF.
ENDLOOP.
" Skipping ls_row_9-value to avoid recursion
LOOP AT lo_value_1->get_l( ) into lo_row_10.
lo_row_11 = lo_row_10.
IF lo_row_11 IS NOT INITIAL.
lv_stringattributevalue = lo_row_11->get_s( ).
lv_numberattributevalue = lo_row_11->get_n( ).
lv_binaryattributevalue = lo_row_11->get_b( ).
LOOP AT lo_row_11->get_ss( ) into lo_row_3.
lo_row_4 = lo_row_3.
IF lo_row_4 IS NOT INITIAL.
lv_stringattributevalue = lo_row_4->get_value( ).
ENDIF.
ENDLOOP.
LOOP AT lo_row_11->get_ns( ) into lo_row_5.
lo_row_6 = lo_row_5.
IF lo_row_6 IS NOT INITIAL.
lv_numberattributevalue = lo_row_6->get_value( ).
ENDIF.
ENDLOOP.
LOOP AT lo_row_11->get_bs( ) into lo_row_7.
lo_row_8 = lo_row_7.
IF lo_row_8 IS NOT INITIAL.
lv_binaryattributevalue = lo_row_8->get_value( ).
ENDIF.
ENDLOOP.
" Skipping lo_row_10 to avoid recursion
" Skipping lo_row_10 to avoid recursion
lv_nullattributevalue = lo_row_11->get_null( ).
lv_booleanattributevalue = lo_row_11->get_bool( ).
ENDIF.
ENDLOOP.
lv_nullattributevalue = lo_value_1->get_null( ).
lv_booleanattributevalue = lo_value_1->get_bool( ).
ENDIF.
ENDLOOP.
LOOP AT lo_value->get_l( ) into lo_row_10.
lo_row_11 = lo_row_10.
IF lo_row_11 IS NOT INITIAL.
lv_stringattributevalue = lo_row_11->get_s( ).
lv_numberattributevalue = lo_row_11->get_n( ).
lv_binaryattributevalue = lo_row_11->get_b( ).
LOOP AT lo_row_11->get_ss( ) into lo_row_3.
lo_row_4 = lo_row_3.
IF lo_row_4 IS NOT INITIAL.
lv_stringattributevalue = lo_row_4->get_value( ).
ENDIF.
ENDLOOP.
LOOP AT lo_row_11->get_ns( ) into lo_row_5.
lo_row_6 = lo_row_5.
IF lo_row_6 IS NOT INITIAL.
lv_numberattributevalue = lo_row_6->get_value( ).
ENDIF.
ENDLOOP.
LOOP AT lo_row_11->get_bs( ) into lo_row_7.
lo_row_8 = lo_row_7.
IF lo_row_8 IS NOT INITIAL.
lv_binaryattributevalue = lo_row_8->get_value( ).
ENDIF.
ENDLOOP.
LOOP AT lo_row_11->get_m( ) into ls_row_9.
lv_key = ls_row_9-key.
lo_value_1 = ls_row_9-value.
IF lo_value_1 IS NOT INITIAL.
lv_stringattributevalue = lo_value_1->get_s( ).
lv_numberattributevalue = lo_value_1->get_n( ).
lv_binaryattributevalue = lo_value_1->get_b( ).
LOOP AT lo_value_1->get_ss( ) into lo_row_3.
lo_row_4 = lo_row_3.
IF lo_row_4 IS NOT INITIAL.
lv_stringattributevalue = lo_row_4->get_value( ).
ENDIF.
ENDLOOP.
LOOP AT lo_value_1->get_ns( ) into lo_row_5.
lo_row_6 = lo_row_5.
IF lo_row_6 IS NOT INITIAL.
lv_numberattributevalue = lo_row_6->get_value( ).
ENDIF.
ENDLOOP.
LOOP AT lo_value_1->get_bs( ) into lo_row_7.
lo_row_8 = lo_row_7.
IF lo_row_8 IS NOT INITIAL.
lv_binaryattributevalue = lo_row_8->get_value( ).
ENDIF.
ENDLOOP.
" Skipping ls_row_9-value to avoid recursion
" Skipping ls_row_9-value to avoid recursion
lv_nullattributevalue = lo_value_1->get_null( ).
lv_booleanattributevalue = lo_value_1->get_bool( ).
ENDIF.
ENDLOOP.
" Skipping lo_row_10 to avoid recursion
lv_nullattributevalue = lo_row_11->get_null( ).
lv_booleanattributevalue = lo_row_11->get_bool( ).
ENDIF.
ENDLOOP.
lv_nullattributevalue = lo_value->get_null( ).
lv_booleanattributevalue = lo_value->get_bool( ).
ENDIF.
ENDLOOP.
lv_scorenumber = lo_row_1->get_score( ).
ENDIF.
ENDLOOP.
ENDIF.
To search for similar vectors¶
This example searches the Products table for the top 3 items most similar to a provided vector, using the 'cosine-product-idx' vector index. The SearchConditionExpression filters results to the 'Electronics' category. The operation returns only the ProductName and Price attributes.
DATA(lo_result) = lo_client->searchvectors(
it_expressionattributevalues = VALUE /aws1/cl_dynattributevalue=>tt_expressionattributevaluemap(
(
VALUE /aws1/cl_dynattributevalue=>ts_xprsnattrvaluemap_maprow(
key = |:cat|
value = new /aws1/cl_dynattributevalue( iv_s = |Electronics| )
)
)
)
it_searchvector = VALUE /aws1/cl_dynattributevalue=>tt_searchvectorlist(
( new /aws1/cl_dynattributevalue( iv_n = |0.12| ) )
( new /aws1/cl_dynattributevalue( iv_n = |0.85| ) )
( new /aws1/cl_dynattributevalue( iv_n = |0.44| ) )
( new /aws1/cl_dynattributevalue( iv_n = |0.67| ) )
)
iv_indexname = |cosine-product-idx|
iv_projectionexpression = |ProductName, Price|
iv_returnconsumedcapacity = |INDEXES|
iv_searchconditionexpression = |Category = :cat|
iv_tablename = |Products|
iv_topk = 3
).