全部產品
Search
文件中心

ApsaraDB for MongoDB:MongoDB Search

更新時間:Nov 05, 2025

在MongoDB中實現複雜的全文檢索搜尋或AI驅動的向量檢索時,通常需要引入並維護獨立的搜尋引擎(如Elasticsearch),這會增加系統架構的複雜性,並帶來額外的資料同步和營運成本。

MongoDB Search功能通過在MongoDB執行個體中整合專用的搜尋節點(mongot),提供與資料庫無縫整合的全文檢索索引和向量檢索能力。無需管理外部搜尋系統,即可使用MongoDB查詢語言(MQL)完成多模態搜尋任務,從而簡化開發、降低營運負擔。

計費說明(免費試用活動)

MongoDB Search功能當前處於邀測階段,可通過填寫表單申請試用。在此期間,開通並使用Search功能不收取mongot搜尋節點的費用,只需支付MongoDB主執行個體的費用。

適用範圍

  • 當前僅支援MongoDB 8.0版本的複本集獨享型規格執行個體。暫不支援分區叢集

  • 當前僅支援公用雲地區。

工作原理

MongoDB Search通過為執行個體添加專用的mongot搜尋節點來隔離搜尋負載。該架構確保高強度的搜尋任務不影響核心資料庫(mongod節點)的請求處理效能。

  • 架構核心mongot節點是承載全文檢索索引和向量檢索的獨立計算資源,專門負責處理$search(全文檢索索引)和$vectorSearch(向量檢索)請求。

  • 資料同步:mongot 節點通過 Change Stream 的方式非同步複製 mongod 節點的 oplog 來保持索引資料同步,保證最終一致性。

  • 查詢路由:發起包含$search$vectorSearch的彙總查詢時,mongos會將搜尋部分路由到mongot節點執行,然後將搜尋結果與mongod節點上的常規查詢結果合并,最終返回統一的結果集。

開通Search服務

目的

為已有的MongoDB執行個體啟用Search功能,以建立專用的mongot搜尋節點。

操作步驟

  1. 訪問MongoDB複本集執行個體列表,在上方選擇資源群組和地區,然後單擊目標執行個體ID。

  2. 在左側導覽列,選擇MongoDB Search

  3. MongoDB Search頁面,單擊立即開通

  4. 開通 Search 面板中,配置搜尋節點規格

    參數

    說明

    規格

    mongot搜尋節點選擇合適的計算規格。可根據預期的查詢並發量(QPS)和資料複雜度選擇。

    儲存

    mongot節點分配用於儲存Search索引的磁碟空間。該空間獨立於主執行個體的儲存。可根據來源資料量和索引複雜度預估,並留出一定餘量。

    建議搜尋節點規格和儲存大小不低於主執行個體的規格和儲存大小,後續可根據實際負載進行變更配置。

  5. 閱讀並勾選服務合約

  6. 單擊去支付

等待建立成功後,可在 MongoDB Search 頁面查看新建立的Search節點資訊,並進行變更配置重啟釋放操作。

管理Search節點

MongoDB Search 頁面,可對已建立的Search節點執行以下操作:

  • 變更配置:調整mongot節點的計算規格或儲存空間以適應業務變化。Search節點數量預設為2個,暫不支援變更。

  • 重啟:在排查問題或應用某些配置時,可以重啟mongot節點。重啟期間,搜尋服務將短暫不可用。

  • 釋放:如果不再需要Search功能,可釋放mongot節點。

    重要

    釋放操作會永久刪除所有已建立的Search索引,且不可恢複。

建立與使用Search索引

目的

通過建立不同類型的Search索引,啟用全文檢索索引或向量檢索功能。所有操作均通過MongoDB Shell(mongosh)或相容的MongoDB驅動程式完成。

前提條件

已使用mongosh或應用程式串連到目標MongoDB執行個體。

樣本一:實現商品評論的全文檢索索引

本樣本示範如何為reviews集合建立全文Search索引,並執行關鍵詞查詢。

  1. 建立動態映射的Search索引。 dynamic: true使MongoDB自動為集合中的所有欄位建立索引,適合快速原型驗證。

    // 在名為 'reviews' 的集合上建立一個名為 'reviews_full_text_index' 的Search索引
    db.reviews.createSearchIndex({
      name: "reviews_full_text_index",
      definition: {
        "mappings": {
          "dynamic": true
        }
      }
    });
    
  2. 使用$search彙總階段查詢包含特定關鍵詞的評論。 以下查詢將尋找comment欄位中包含“good”的評論,並返回評論內容、評分和商品ID。

    db.reviews.aggregate([
      {
        $search: {
          index: "reviews_full_text_index", // 指定要使用的Search索引
          text: {
            query: "good", // 查詢關鍵詞
            path: "comment"      // 在 'comment' 欄位中搜尋
          }
        }
      },
      {
        $limit: 5
      },
      {
        $project: {
          _id: 0,
          productId: 1,
          rating: 1,
          comment: 1,
          score: { $meta: "searchScore" } // 返回搜尋相關性得分
        }
      }
    ]);
    

樣本二:實現基於圖片特徵的以圖搜圖

本樣本示範如何為儲存了圖片向量特徵的集合images建立向量Search索引,並執行相似性搜尋。

  1. 建立向量Search索引。 需指定向量欄位的路徑、維度(numDimensions)和相似性計算方法(similarity)。

    // 在名為 'images' 的集合上建立一個名為 'vector_index' 的向量索引
    db.images.createSearchIndex(
      "vector_index", 
      "vectorSearch", 
      {
        "fields": [
          {
            "type": "vector",
            "path": "plot_embedding_voyage_3_large",// 儲存向量的欄位
            "numDimensions": 2048,// 向量的維度
            "similarity": "dotProduct",// 相似性計算方法
            "quantization": "scalar"
          }
        ]
      }
    );
    
  2. 使用$vectorSearch彙總階段尋找與給定圖片最相似的圖片。 需提供一個查詢向量(queryVector),它通常由AI模型根據輸入圖片產生。

    numCandidates:候選集大小。這是一個效能與召回率的權衡參數。增加此值可以提高召回準確率,但會消耗更多資源並可能增加延遲。

    // 假設 QUERY_EMBEDDING 是由AI模型產生的1024維向量
    const QUERY_EMBEDDING = [0.12, 0.45, -0.23, ...]; // 樣本向量,請替換為真實向量資料
    // 根據向量相似複雜度進行檢索
    db.images.aggregate([
      {
        "$vectorSearch": {
          "index": "vector_index",
          "path": "plot_embedding_voyage_3_large",
          "queryVector": QUERY_EMBEDDING,
          "numCandidates": 150,
          "limit": 10,
          "quantization": "scalar"
        }
      },
      {
        "$project": {
          "_id": 0,
          "plot": 1,
          "title": 1,
          "score": { $meta: "vectorSearchScore" }
        }
      }
    ])
    

應用於生產環境

監控與營運

  • 監控指標mongot搜尋節點暫時沒有獨立的監控指標。可通過觀察主執行個體的CPU、記憶體、IO和網路指標來間接評估搜尋負載的影響。

  • 日誌管理mongot節點暫不支援作業記錄、慢日誌或審計日誌的查看。對於慢查詢,建議使用explain()方法分析$search$vectorSearch階段的執行計畫來定位效能瓶頸。

  • 索引管理:可通過db.collection.getSearchIndexes()命令查看已建立的Search索引及其狀態。

高可用與故障切換

  • Search節點預設以2節點架構部署。當其中一個節點發生故障時,系統會自動執行故障切換,將流量路由到健康的節點,請確保業務具備重試機制。

備份恢複與資料同步

  • 備份恢複:通過備份檔案恢複的新執行個體不包含原執行個體的Search索引。需在新執行個體上重新開通Search服務並重建所有Search索引。

  • 資料移轉:使用Data Transmission Service(DTS)等工具進行資料移轉或同步時,Search索引不會被同步。需在目標執行個體上手動建立索引。

常見問題

  • Q:寫入資料後多久可以搜尋?

    A:資料同步是非同步,通常在秒級延遲內即可搜尋。延遲受執行個體寫入負載、文檔大小和網路狀況等因素影響。

  • Q:在什麼情況下會觸發索引重建?升降配是否會觸發索引重建?

    A:當更改索引定義時,mongot會自動在後台重建新的索引,此時舊索引仍可支援查詢, 一旦新索引完成構建,舊索引就不再可用。搜尋節點升降配和索引重建並沒有直接關聯。