diff -Nuar a/vendor/magento/module-catalog-search/Model/ResourceModel/Advanced/Collection.php b/vendor/magento/module-catalog-search/Model/ResourceModel/Advanced/Collection.php
index ddfedad6927..a991fbb113f 100644
--- a/vendor/magento/module-catalog-search/Model/ResourceModel/Advanced/Collection.php
+++ b/vendor/magento/module-catalog-search/Model/ResourceModel/Advanced/Collection.php
@@ -389,7 +389,8 @@ class Collection extends \Magento\Catalog\Model\ResourceModel\Product\Collection
             'collection' => $this,
             'searchResult' => $searchResult,
             /** This variable sets by serOrder method, but doesn't have a getter method. */
-            'orders' => $this->_orders
+            'orders' => $this->_orders,
+            'size' => $this->getPageSize(),
         ]);
     }
 
diff -Nuar a/vendor/magento/module-catalog-search/Model/ResourceModel/Fulltext/Collection.php b/vendor/magento/module-catalog-search/Model/ResourceModel/Fulltext/Collection.php
index 9d0d4c32cfb..3c144bac66f 100644
--- a/vendor/magento/module-catalog-search/Model/ResourceModel/Fulltext/Collection.php
+++ b/vendor/magento/module-catalog-search/Model/ResourceModel/Fulltext/Collection.php
@@ -486,7 +486,7 @@ class Collection extends \Magento\Catalog\Model\ResourceModel\Product\Collection
             'builder' => $this->getSearchCriteriaBuilder(),
             'collection' => $this,
             'searchRequestName' => $this->searchRequestName,
-            'currentPage' => $this->_curPage,
+            'currentPage' => (int)$this->_curPage,
             'size' => $this->getPageSize(),
             'orders' => $this->searchOrders,
         ]);
@@ -505,6 +505,8 @@ class Collection extends \Magento\Catalog\Model\ResourceModel\Product\Collection
             'searchResult' => $searchResult,
             /** This variable sets by serOrder method, but doesn't have a getter method. */
             'orders' => $this->_orders,
+            'size' => $this->getPageSize(),
+            'currentPage' => (int)$this->_curPage,
         ]);
     }
 
diff -Nuar a/vendor/magento/module-elasticsearch/Model/ResourceModel/Fulltext/Collection/SearchResultApplier.php b/vendor/magento/module-elasticsearch/Model/ResourceModel/Fulltext/Collection/SearchResultApplier.php
index 1e8d2730660..7cea6a329f1 100644
--- a/vendor/magento/module-elasticsearch/Model/ResourceModel/Fulltext/Collection/SearchResultApplier.php
+++ b/vendor/magento/module-elasticsearch/Model/ResourceModel/Fulltext/Collection/SearchResultApplier.php
@@ -25,16 +25,32 @@ class SearchResultApplier implements SearchResultApplierInterface
      */
     private $searchResult;
 
+    /**
+     * @var int
+     */
+    private $size;
+
+    /**
+     * @var int
+     */
+    private $currentPage;
+
     /**
      * @param Collection $collection
      * @param SearchResultInterface $searchResult
+     * @param int $size
+     * @param int $currentPage
      */
     public function __construct(
         Collection $collection,
-        SearchResultInterface $searchResult
+        SearchResultInterface $searchResult,
+        int $size,
+        int $currentPage
     ) {
         $this->collection = $collection;
         $this->searchResult = $searchResult;
+        $this->size = $size;
+        $this->currentPage = $currentPage;
     }
 
     /**
@@ -46,8 +62,13 @@ class SearchResultApplier implements SearchResultApplierInterface
             $this->collection->getSelect()->where('NULL');
             return;
         }
+
+        $items = $this->sliceItems($this->searchResult->getItems(), $this->size, $this->currentPage);
+        if (empty($items)) {
+            return;
+        }
         $ids = [];
-        foreach ($this->searchResult->getItems() as $item) {
+        foreach ($items as $item) {
             $ids[] = (int)$item->getId();
         }
         $this->collection->setPageSize(null);
@@ -56,4 +77,27 @@ class SearchResultApplier implements SearchResultApplierInterface
         $this->collection->getSelect()->reset(\Magento\Framework\DB\Select::ORDER);
         $this->collection->getSelect()->order(new \Zend_Db_Expr("FIELD(e.entity_id,$orderList)"));
     }
+
+    /**
+     * Slice current items
+     *
+     * @param array $items
+     * @param int $size
+     * @param int $currentPage
+     * @return array
+     */
+    private function sliceItems(array $items, int $size, int $currentPage): array
+    {
+        if ($size !== 0) {
+            $totalPages = (int) ceil(count($items)/$size);
+            $currentPage = min($currentPage, $totalPages);
+            $offset = ($currentPage - 1) * $size;
+            if ($offset < 0) {
+                $offset = 0;
+            }
+            $items = array_slice($items, $offset, $this->size);
+        }
+
+        return $items;
+    }
 }
