本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用向量搜尋集合
OpenSearch Serverless 中的向量搜尋集合類型提供可擴展且高效能的相似性搜尋功能。這可讓您輕鬆建置現代機器學習 (ML) 擴增搜尋體驗和生成式人工智慧 (AI) 應用程式,而無需管理基礎向量資料庫基礎設施。
向量搜尋集合的使用案例包括影像搜尋、文件搜尋、音樂擷取、產品建議、影片搜尋、以位置為基礎的搜尋、詐騙偵測和異常偵測。
由於 OpenSearch Serverless 的向量引擎是由 中的 k 近鄰 (k-NN) 搜尋功能
向量引擎提供距離指標,例如 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 集合
-
https://console.aws.amazon.com/aos/在家中
開啟 Amazon OpenSearch Service 主控台。 -
在左側導覽窗格中選擇 Collections (集合),然後選擇 Create collection (建立集合)。
-
命名集合外殼。
-
針對集合類型,選擇向量搜尋。如需詳細資訊,請參閱選擇集合類型。
-
在部署類型下,清除啟用備援 (作用中複本)。這會在開發或測試模式中建立集合,並將集合中的 OpenSearch 運算單位 (OCUs) 數量減少為 2。如果您想要在本教學課程中建立生產環境,請保持選取核取方塊。
-
在安全下,選取輕鬆建立以簡化您的安全組態。根據預設,向量引擎中的所有資料都會在傳輸中和靜態時加密。向量引擎支援精細的IAM許可,讓您可以定義誰可以建立、更新和刪除加密、網路、集合和索引。
-
選擇 Next (下一步)。
-
檢閱集合設定,然後選擇 Submit (提交)。等待幾分鐘,讓收集狀態變成
Active
。
步驟 3:上傳並搜尋資料
索引是具有常見資料結構描述的文件集合,可讓您儲存、搜尋和擷取向量內嵌和其他欄位。您可以使用 OpenSearch Dashboards 中的開發工具
為 movies 集合中的資料編製索引和進行搜尋
-
若要為新集合建立單一索引,請在開發工具
主控台中傳送下列請求。根據預設,這會建立具有 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" } } } }
-
若要將單一文件編製索引至外殼索引,請傳送下列請求:
POST housing-index/_doc { "housing-vector": [ 10, 20, 30 ], "title": "2 bedroom in downtown Seattle", "price": "2800", "location": "47.71, 122.00" }
-
若要搜尋與索引中的屬性相似的屬性,請傳送下列查詢:
GET housing-index/_search { "size": 5, "query": { "knn": { "housing-vector": { "vector": [ 10, 20, 30 ], "k": 5 } } } }
步驟 4:刪除集合
由於外殼集合是用於測試目的,請務必在完成實驗時將其刪除。
刪除 OpenSearch Serverless 集合
-
返回 Amazon OpenSearch Service 主控台。
-
在左側導覽窗格中選擇集合,然後選取屬性集合。
-
選擇刪除並確認刪除。
篩選的搜尋
您可以使用篩選條件來精簡語意搜尋結果。若要建立索引並對文件執行篩選搜尋,請將上一個教學課程中的上傳和搜尋資料替換為下列指示。其他步驟保持不變。如需篩選條件的詳細資訊,請參閱使用篩選條件進行 k-NN 搜尋
為 movies 集合中的資料編製索引和進行搜尋
-
若要為您的集合建立單一索引,請在開發工具
主控台中傳送下列請求: 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" } } } }
-
若要將單一文件索引為 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" }
-
若要以指定價格在地理點的指定距離內搜尋西雅圖的公寓資料,請傳送下列請求:
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
限制
向量搜尋集合有下列限制:
-
向量搜尋集合不支援 Apache Lucene ANN引擎。
-
向量搜尋集合僅支援 Faiss 的HNSW演算法,不支援 IVF和 IVFQ。
-
向量搜尋集合不支援暖機、統計資料和模型訓練API操作。
-
向量搜尋集合不支援內嵌或預存指令碼。
-
AWS Management Console 向量搜尋集合的 中不提供索引計數資訊。
-
向量搜尋集合上索引的重新整理間隔為 60 秒。
後續步驟
現在您知道如何建立向量搜尋集合和索引資料,建議您嘗試下列一些練習:
-
使用 OpenSearch Python 用戶端來處理向量搜尋集合。請參閱 上的本教學課程GitHub
。 -
使用 OpenSearch Java 用戶端來使用向量搜尋集合。請參閱 上的本教學課程GitHub
。 -
設定 LangChain OpenSearch 做為向量存放區使用。 LangChain 是開發語言模型支援之應用程式的開放原始碼架構。如需詳細資訊,請參閱 LangChain 文件
。