使用向量搜尋集合 - Amazon OpenSearch 服務

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用向量搜尋集合

OpenSearch 無伺服器中的向量搜尋集合類型提供可擴充且高效能的相似性搜尋功能。您可以輕鬆建置現代機器學習 (ML) 擴增搜尋體驗和生成人工智慧 (AI) 應用程式,而無需管理基礎向量資料庫基礎架構。

向量搜尋系列的使用案例包括影像搜尋、文件搜尋、音樂擷取、產品推薦、影片搜尋、位置型搜尋、詐騙偵測和異常偵測。

由於 OpenSearch 無伺服器的向量引擎是由中的 k 最近鄰點 (k-nN) 搜尋功能提供支援 OpenSearch,因此您可以在無伺服器環境的簡易性下獲得相同的功能。此引擎支援 k-NN OpenSearch API 作業。透過這些作業,您可以利用全文檢索搜尋、進階篩選、彙總、地理空間查詢、巢狀查詢以加快資料擷取速度,以及增強的搜尋結果。

向量引擎提供距離度量,例如歐幾里得距離、餘弦相似度和點積相似度,並且可容納 16,000 個維度。您可以為中繼資料儲存具有各種資料類型的欄位,例如數字、布林值、日期、關鍵字和地理點。您還可以將帶有文本的字段存儲為描述性信息,以向存儲的向量添加更多上下文。分配數據類型可降低複雜性,提高可維護性,並避免數據重複,版本兼容性挑戰和許可問題。

開始使用向量搜尋集合

在本教學課程中,您將完成下列步驟,以即時儲存、搜尋和擷取向量嵌入:

步驟 1:設定許可

若要完成本教學課程 (以及一般使用 OpenSearch 無伺服器),您必須擁有正確的 AWS Identity and Access Management (IAM) 許可。在本教學課程中,您會建立系列、上傳和搜尋資料,然後刪除系列。

使用者或角色必須連接身分型政策,該政策包含以下最低許可:

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "aoss:CreateCollection", "aoss:ListCollections", "aoss:BatchGetCollection", "aoss:DeleteCollection", "aoss:CreateAccessPolicy", "aoss:ListAccessPolicies", "aoss:UpdateAccessPolicy", "aoss:CreateSecurityPolicy", "iam:ListUsers", "iam:ListRoles" ], "Effect": "Allow", "Resource": "*" } ] }

如需 OpenSearch 無伺服器 IAM 許可的詳細資訊,請參閱適用於 Amazon OpenSearch 無伺服器的 Identity and Access Management

步驟 2:建立集合

集合是一組 OpenSearch 索引,可協同運作以支援特定工作負載或使用案例。

若要建立 OpenSearch 無伺服器集合
  1. 在以下位置打開 Amazon OpenSearch 服務控制台 https://console.aws.amazon.com/aos/home

  2. 在左側導覽窗格中選擇 Collections (集合),然後選擇 Create collection (建立集合)。

  3. 命名收集房屋

  4. 對於集合類型,請選擇向量搜尋。如需詳細資訊,請參閱 選擇集合類型

  5. 在 [部署類型] 下,清除 [啟用備援 (主動複本)]。這會在開發或測試模式中建立集合,並將集合中的 OpenSearch 運算單元 (OCU) 數量減少為兩個。如果您要在此自學課程中建立生產環境,請保持選取勾選方塊。

  6. 在 [安全性] 下,選取 [輕鬆建立] 以簡化安全性設定。預設情況下,向量引擎中的所有資料都會在傳輸過程中和靜態時進行加密。向量引擎支援精細的 IAM 許可,因此您可以定義誰可以建立、更新和刪除加密、網路、集合和索引。

  7. 選擇下一步

  8. 檢閱集合設定,然後選擇 Submit (提交)。等待幾分鐘,讓收集狀態變成 Active

步驟 3:上傳並搜尋資料

是具有通用數據模式的文檔集合,它為您提供了一種存儲,搜索和檢索向量嵌入和其他字段的方法。您可以使用 OpenSearch 儀表板中的開發工具主控台或 HTTP 工具 (例如郵遞員aw scurl),建立資料並將其上傳至 OpenSearch 無伺服器集合中的索引。本教學課程使用開發工具。

為 movies 集合中的資料編製索引和進行搜尋
  1. 若要為新集合建立單一索引,請在 Dev Tools 主控台中傳送下列要求。默認情況下,這將創建一個帶有nmslib引擎和歐幾里得距離的索引。

    PUT housing-index { "settings": { "index.knn": true }, "mappings": { "properties": { "housing-vector": { "type": "knn_vector", "dimension": 3 }, "title": { "type": "text" }, "price": { "type": "long" }, "location": { "type": "geo_point" } } } }
  2. 要索引單個文檔到住房索引,發送以下請求:

    POST housing-index/_doc { "housing-vector": [ 10, 20, 30 ], "title": "2 bedroom in downtown Seattle", "price": "2800", "location": "47.71, 122.00" }
  3. 若要搜尋與索引中類似的屬性,請傳送下列查詢:

    GET housing-index/_search { "size": 5, "query": { "knn": { "housing-vector": { "vector": [ 10, 20, 30 ], "k": 5 } } } }

步驟 4:刪除集合

因為住房集合是用於測試目的,請確保在完成實驗後將其刪除。

若要刪除 OpenSearch 無伺服器集合
  1. 返回 Amazon OpenSearch 服務控制台。

  2. 在左側導覽窗格中選擇「合」,然後選取屬性集合。

  3. 選擇刪除並確認刪除。

篩選搜尋

您可以使用過濾器來優化語義搜索結果。若要建立索引並對文件執行篩選搜尋,請使用下列指示取代上一個教學課程中的「上載」和「搜尋資料」。其他步驟保持不變。如需有關篩選器的詳細資訊,請參閱 K-NN 使用篩選器搜尋

為 movies 集合中的資料編製索引和進行搜尋
  1. 若要為集合建立單一索引,請在 Dev Tools 主控台中傳送下列要求:

    PUT housing-index-filtered { "settings": { "index.knn": true }, "mappings": { "properties": { "housing-vector": { "type": "knn_vector", "dimension": 3, "method": { "engine": "faiss", "name": "hnsw" } }, "title": { "type": "text" }, "price": { "type": "long" }, "location": { "type": "geo_point" } } } }
  2. 若要將單一文件編入索引 housing-index-filtered,請傳送下列要求:

    POST housing-index-filtered/_doc { "housing-vector": [ 10, 20, 30 ], "title": "2 bedroom in downtown Seattle", "price": "2800", "location": "47.71, 122.00" }
  3. 要以指定價格並在地理位置的指定距離內搜索西雅圖的公寓數據,請發送以下請求:

    GET housing-index-filtered/_search { "size": 5, "query": { "knn": { "housing-vector": { "vector": [ 0.1, 0.2, 0.3 ], "k": 5, "filter": { "bool": { "must": [ { "query_string": { "query": "Find me 2 bedroom apartment in Seattle under $3000 ", "fields": [ "title" ] } }, { "range": { "price": { "lte": 3000 } } }, { "geo_distance": { "distance": "100miles", "location": { "lat": 48, "lon": 121 } } } ] } } } } } }

十億規模的工作

向量搜尋集合支援具有數十億向量的工作負載。您不需要為縮放目的重新索引,因為 auto 縮放可以為您執行此操作。如果您有數百萬個具有大量維度的向量 (或更多),且需要 200 個以上的 OCU,請連絡 Sup AWS port 部門,以提高您帳戶的最大 OpenSearch 運算單位 (OCU)。

限制

向量搜尋集合有下列限制:

  • 向量搜尋集合不支援阿帕奇尼的 ANN 引擎。

  • 矢量搜索集合僅支持使用 Faiss 的 HNSW 算法,不支持 IVF 和 IVFQ。

  • 向量搜尋集合不支援暖機、統計資料和模型訓練 API 作業。

  • 向量搜尋集合不支援內嵌或儲存的指令碼。

  • 向量搜尋集合中無法使用索引計數資訊。 AWS Management Console

  • 向量搜尋集合上索引的重新整理間隔為 60 秒。

後續步驟

現在您已經知道如何建立向量搜尋集合和索引資料,您可能想要嘗試下列其中一些練習:

  • 使用 OpenSearch Python 用戶端來處理向量搜尋集合。請參閱上的此自學課程GitHub

  • 您可以使用 OpenSearch Java 客戶端來處理矢量搜索集合。請參閱上的此自學課程GitHub

  • 設置 LangChain 為用 OpenSearch 作矢量存儲。 LangChain 是一個開放原始碼架構,用於開發採用語言模型的應用程式。如需詳細資訊,請參閱LangChain 文件