使用向量搜尋集合 - Amazon OpenSearch Service

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

使用向量搜尋集合

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

向量搜尋集合的使用案例包括影像搜尋、文件搜尋、音樂擷取、產品建議、影片搜尋、以位置為基礎的搜尋、詐騙偵測和異常偵測。

由於 OpenSearch Serverless 的向量引擎是由 中的 k 近鄰 (k-NN) 搜尋功能所驅動 OpenSearch,因此您可以簡單地取得相同的功能,並簡化無伺服器環境。引擎支援 k-NN 外掛程式 API。透過這些操作,您可以利用全文搜尋、進階篩選、彙總、地理空間查詢、巢狀查詢,以更快速地擷取資料,以及增強型搜尋結果。

向量引擎提供距離指標,例如 Euclidean 距離、餘弦相似性和點產品相似性,可容納 16,000 個維度。您可以存放具有各種中繼資料資料類型的欄位,例如數字、布林值、日期、關鍵字和地理位置。您也可以使用文字來存放欄位,以取得描述性資訊,以新增更多內容到已儲存的向量。聯合處理資料類型可降低複雜性、提高可維護性,並避免資料重複、版本相容性挑戰和授權問題。

注意

Amazon OpenSearch Serverless 支援 Faiss 16 位元純量量化,可用於在 32 位元浮點數和 16 位元向量之間執行轉換。若要進一步了解,請參閱 Faiss 16 位元純量量化。您也可以使用二進位向量來降低記憶體成本。如需詳細資訊,請參閱二進位向量

向量搜尋集合入門

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

步驟 1:設定許可

若要完成本教學課程 (以及一般使用 OpenSearch Serverless),您必須擁有正確的 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 Serverless 的 Identity and Access Management

步驟 2:建立集合

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

建立 Serverless OpenSearch 集合
  1. https://console.aws.amazon.com/aos/在家中開啟 Amazon OpenSearch Service 主控台。

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

  3. 命名集合外殼

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

  5. 部署類型下,清除啟用備援 (作用中複本)。這會在開發或測試模式中建立集合,並將集合中的 OpenSearch 運算單位 (OCUs) 數量減少為 2。如果您想要在本教學課程中建立生產環境,請保持選取核取方塊。

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

  7. 選擇 Next (下一步)

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

步驟 3:上傳並搜尋資料

索引是具有常見資料結構描述的文件集合,可讓您儲存、搜尋和擷取向量內嵌和其他欄位。您可以使用 OpenSearch Dashboards 中的開發工具主控台或 Postmanawscurl 等HTTP工具,在無 OpenSearch 伺服器集合中建立並上傳資料至索引。本教學課程使用開發工具。

為 movies 集合中的資料編製索引和進行搜尋
  1. 若要為新集合建立單一索引,請在開發工具主控台中傳送下列請求。根據預設,這會建立具有nmslib引擎和歐clidean 距離的索引。

    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 Serverless 集合
  1. 返回 Amazon OpenSearch Service 主控台。

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

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

篩選的搜尋

您可以使用篩選條件來精簡語意搜尋結果。若要建立索引並對文件執行篩選搜尋,請將上一個教學課程中的上傳和搜尋資料替換為下列指示。其他步驟保持不變。如需篩選條件的詳細資訊,請參閱使用篩選條件進行 k-NN 搜尋

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

    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 } } } ] } } } } } }

數十億個規模的工作負載

向量搜尋集合支援使用數十億個向量的工作負載。您不需要為擴展目的重新編製索引,因為自動擴展會為您執行此操作。如果您有數百萬個具有大量維度的向量 (或更多),且需要超過 200 OCUs個,請聯絡 AWS Support 來提高您帳戶的 OpenSearch 運算單位上限 (OCUs)。

限制

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

  • 向量搜尋集合不支援 Apache Lucene ANN引擎。

  • 向量搜尋集合僅支援 Faiss 的HNSW演算法,不支援 IVF和 IVFQ。

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

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

  • AWS Management Console 向量搜尋集合的 中不提供索引計數資訊。

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

後續步驟

現在您知道如何建立向量搜尋集合和索引資料,建議您嘗試下列一些練習:

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

  • 使用 OpenSearch Java 用戶端來使用向量搜尋集合。請參閱 上的本教學課程GitHub

  • 設定 LangChain OpenSearch 做為向量存放區使用。 LangChain 是開發語言模型支援之應用程式的開放原始碼架構。如需詳細資訊,請參閱 LangChain 文件