在 BigQuery 中執行向量搜尋

您可以使用 ABAP 版 BigQuery AI 和 ML SDK,透過自然語言搜尋字串,在 BigQuery 中對向量化企業資料執行向量搜尋,並從 ABAP 代理或應用程式中找回結果。

您可以使用 BigQuery 向量搜尋,透過 GoogleSQL 使用向量索引執行語意搜尋,以便取得近似結果。透過 Vector Search,您可以使用高維向量或嵌入項目,在大型資料集中找出語意相似的資料點。您可以將向量嵌入資料儲存在 BigQuery 中,將 BigQuery 做為向量資料庫,並使用 BigQuery 函式 VECTOR_SEARCH 對其套用向量相似度搜尋。

事前準備

在使用 BigQuery AI and ML SDK for ABAP 搭配 Gemini 模型之前,請確認您或管理員已完成下列必要條件:

定價

我們提供免費的 ABAP 適用 BigQuery AI 和 ML SDK。不過,您必須負責支付 CREATE VECTOR INDEX 陳述式和 VECTOR_SEARCH 函式 (使用 BigQuery 運算定價) 的費用。

如要根據預測用量產生預估費用,請使用Pricing Calculator

如要進一步瞭解 BigQuery 的定價,請參閱 BigQuery 定價頁面。

在 BigQuery 執行向量搜尋

本節說明如何使用 ABAP 專用的 BigQuery AI 和 ML SDK,針對儲存在 BigQuery 中的企業資料,從 ABAP 應用程式執行向量語意搜尋。

將 BigQuery 向量搜尋叫用器類別例項化

如要使用搜尋字串執行向量搜尋,您必須將 /GOOG/CL_BQ_VECTOR_SEARCH 類別例項化。

TRY.
    DATA(lo_bq_vector_search) = NEW /goog/cl_bq_vector_search( iv_key = 'CLIENT_KEY' ).
CATCH /goog/cx_sdk INTO DATA(lo_cx_sdk).
    cl_demo_output=>display( lo_cx_sdk->get_text( ) ).

ENDTRY.

CLIENT_KEY 替換為您在驗證設定期間為驗證設定的用戶端金鑰。 Google Cloud

尋找搜尋字串的類似項目

如要執行查詢,以 BigQuery 函式 VECTOR_SEARCH 執行向量搜尋,請使用 /GOOG/CL_BQ_VECTOR_SEARCH 類別的 FIND_NEAREST_NEIGHBORS 方法。

系統會將使用查詢設定的 /GOOG/CL_BQ_QUERY 類別物件,做為方法的輸入內容傳遞。

lo_bq_vector_search->find_nearest_neighbors( io_query = lo_bq_query ).

LO_BQ_QUERY設定查詢後的 /GOOG/CL_BQ_QUERY 類別參照。您可以從查詢文字傳遞搜尋字串。

覆寫向量搜尋參數

您可以在 BigQuery 的已儲存查詢或傳遞的查詢文字中,定義向量搜尋參數 (位於 VECTOR_SEARCH 函式定義下方)。不過,如果您需要覆寫 ABAP 應用程式邏輯中相同查詢的參數,可以使用 /GOOG/CL_BQ_VECTOR_SEARCH 類別的 SET_SEARCH_PARAMETERS 方法來覆寫。初始查詢中的搜尋參數會完全覆寫透過此方法傳遞的參數。

lo_bq_vector_search->set_search_parameters( iv_top_k            = TOP_K
    iv_distance_type            = DISTANCE_TYPE
    iv_fraction_lists_to_search = 'FRACTION_LISTS_TO_SEARCH' ).

更改下列內容:

  • TOP_K:指定要傳回的最近鄰點數量的 INT64 值。
  • DISTANCE_TYPE:字串值,可指定用於計算兩個向量之間距離的度量類型,請在 VECTOR_SEARCH 函式的定義下,從 DISTANCE_TYPE 引數中尋找可能的值。
  • FRACTION_LISTS_TO_SEARCH:字串值,用於指定要搜尋的清單百分比,並在 VECTOR_SEARCH 函式定義的選項下,從 FRACTION_LISTS_TO_SEARCH 引數中尋找可能的值。

取得向量搜尋回應

如要接收 BigQuery ML 針對向量搜尋查詢所處理的回應,並以有意義的方式呈現,請使用 /GOOG/CL_BQ_SEARCH_RESPONSE 類別。

/GOOG/CL_BQ_SEARCH_RESPONSE 類別擷取的回應會鏈結至透過 /GOOG/CL_BQ_VECTOR_SEARCH 類別方法提出的要求,因此您可以在單一陳述式中直接存取回應,而不需要變數來儲存中間結果。

取得搜尋字串的最近鄰

如要取得搜尋字串的最近鄰近字串,請使用 GET_NEAREST_NEIGHBORS 方法。傳回的鄰近項目數量取決於在叫用查詢中 VECTOR_SEARCH 函式的 TOP_K 參數中指定或設定的值。

DATA(lt_search_response) = lo_bq_vector_search->find_nearest_neighbors( io_query = lo_bq_query
                                             )->get_nearest_neighbors( ).

LT_SEARCH_RESPONSE 也包含搜尋回應項目與搜尋字串的距離,用來表示相似程度。

取得搜尋字串的最近鄰

如要取得搜尋字串的最近鄰,請使用 GET_NEAREST_NEIGHBOR 方法。有了這個功能,系統只會根據搜尋字串擷取最相近的項目,不論在叫用查詢的 VECTOR_SEARCH 函式 TOP_K 參數中指定或設定的值為何。

DATA(ls_search_response) = lo_bq_vector_search->find_nearest_neighbors( io_query = lo_bq_query
                                             )->get_nearest_neighbor( ).

LS_SEARCH_RESPONSE 也會包含搜尋回應與搜尋字串的距離,用來表示相似程度。