diff --git a/src/MilvusV2.php b/src/MilvusV2.php
index 44bc544589f006c5678bce44c46a100e15383393..1b43090340a452dfd2c58543771cfeee9c0a4802 100644
--- a/src/MilvusV2.php
+++ b/src/MilvusV2.php
@@ -169,10 +169,15 @@ class MilvusV2 {
   /**
    * Insert into the collection.
    *
+   * Supports both single record and batch inserts. When $data contains
+   * multiple records (numerically indexed array of associative arrays),
+   * all records are inserted in a single API call.
+   *
    * @param string $collection_name
    *   The collection.
    * @param array $data
-   *   The data.
+   *   The data. Can be a single record (associative array) or multiple
+   *   records (numerically indexed array of associative arrays).
    * @param string $database_name
    *   The database.
    *
@@ -180,9 +185,13 @@ class MilvusV2 {
    *   The response.
    */
   public function insertIntoCollection(string $collection_name, array $data, string $database_name = ''): array {
+    // Detect if this is a batch insert (array of records) or single record.
+    // A batch insert has numeric keys starting at 0 and array values.
+    $isBatch = isset($data[0]) && is_array($data[0]);
+
     $params = [
       'collectionName' => $collection_name,
-      'data' => [$data],
+      'data' => $isBatch ? $data : [$data],
     ];
     if ($database_name && !$this->isZilliz()) {
       $params['dbName'] = $database_name;
diff --git a/src/Plugin/VdbProvider/MilvusProvider.php b/src/Plugin/VdbProvider/MilvusProvider.php
index eef935b9a58b34573dec9fd0f603394350893d68..3a60822950118eed33cf25ee4f8557bc7d694a59 100644
--- a/src/Plugin/VdbProvider/MilvusProvider.php
+++ b/src/Plugin/VdbProvider/MilvusProvider.php
@@ -453,6 +453,45 @@ class MilvusProvider extends AiVdbProviderClientBase implements ContainerFactory
     $this->getClient()->dropCollection($collection_name);
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function insertBatchIntoCollection(
+    string $collection_name,
+    array $batch,
+    string $database = 'default',
+  ): void {
+    $processed = FALSE;
+    while (!$processed) {
+      $response = $this->getClient()->insertIntoCollection(
+        $collection_name,
+        $batch,
+        $database,
+      );
+
+      if (!isset($response['code'])) {
+        throw new \Exception("Failed to record vector.");
+      }
+
+      switch ($response['code']) {
+        case 1100:
+          foreach ($batch as &$record) {
+            $this->sanitizeMaxLength($record);
+          }
+          unset($record);
+          break;
+
+        case 200:
+        case 0:
+          $processed = TRUE;
+          break;
+
+        default:
+          throw new \Exception("Failed to insert into collection: " . ($response['message'] ?? 'Unknown error'));
+      }
+    }
+  }
+
   /**
    * {@inheritdoc}
    *
