diff --git a/core/config/schema/core.entity.schema.yml b/core/config/schema/core.entity.schema.yml
index 57e5547255..0fea3c1f4e 100644
--- a/core/config/schema/core.entity.schema.yml
+++ b/core/config/schema/core.entity.schema.yml
@@ -234,6 +234,9 @@ field.widget.settings.entity_reference_autocomplete_tags:
     match_operator:
       type: string
       label: 'Autocomplete matching'
+    match_size:
+      type: integer
+      label: 'Number of autocomplete suggestions.'
     size:
       type: integer
       label: 'Size of textfield'
@@ -248,6 +251,9 @@ field.widget.settings.entity_reference_autocomplete:
     match_operator:
       type: string
       label: 'Autocomplete matching'
+    match_size:
+      type: integer
+      label: 'Number of autocomplete suggestions.'
     size:
       type: integer
       label: 'Size of textfield'
diff --git a/core/lib/Drupal/Core/Entity/EntityAutocompleteMatcher.php b/core/lib/Drupal/Core/Entity/EntityAutocompleteMatcher.php
index 2cede4dffa..7af0344217 100644
--- a/core/lib/Drupal/Core/Entity/EntityAutocompleteMatcher.php
+++ b/core/lib/Drupal/Core/Entity/EntityAutocompleteMatcher.php
@@ -61,7 +61,8 @@ public function getMatches($target_type, $selection_handler, $selection_settings
     if (isset($string)) {
       // Get an array of matching entities.
       $match_operator = !empty($selection_settings['match_operator']) ? $selection_settings['match_operator'] : 'CONTAINS';
-      $entity_labels = $handler->getReferenceableEntities($string, $match_operator, 10);
+      $match_size = isset($selection_settings['match_size']) ? (int) $selection_settings['match_size'] : 10;
+      $entity_labels = $handler->getReferenceableEntities($string, $match_operator, $match_size);
 
       // Loop through the entities and convert them into autocomplete output.
       foreach ($entity_labels as $values) {
diff --git a/core/lib/Drupal/Core/Field/Plugin/Field/FieldWidget/EntityReferenceAutocompleteWidget.php b/core/lib/Drupal/Core/Field/Plugin/Field/FieldWidget/EntityReferenceAutocompleteWidget.php
index 493d6a4f67..9121ffeafb 100644
--- a/core/lib/Drupal/Core/Field/Plugin/Field/FieldWidget/EntityReferenceAutocompleteWidget.php
+++ b/core/lib/Drupal/Core/Field/Plugin/Field/FieldWidget/EntityReferenceAutocompleteWidget.php
@@ -28,7 +28,8 @@ class EntityReferenceAutocompleteWidget extends WidgetBase {
   public static function defaultSettings() {
     return [
       'match_operator' => 'CONTAINS',
-      'size' => '60',
+      'match_size' => 10,
+      'size' => 60,
       'placeholder' => '',
     ] + parent::defaultSettings();
   }
@@ -44,6 +45,13 @@ public function settingsForm(array $form, FormStateInterface $form_state) {
       '#options' => $this->getMatchOperatorOptions(),
       '#description' => t('Select the method used to collect autocomplete suggestions. Note that <em>Contains</em> can cause performance issues on sites with thousands of entities.'),
     ];
+    $element['match_size'] = [
+      '#type' => 'number',
+      '#title' => t('Number of results'),
+      '#default_value' => $this->getSetting('match_size'),
+      '#min' => 0,
+      '#description' => t('The number of suggestions that will be listed. Use <em>0</em> to remove the limit.'),
+    ];
     $element['size'] = [
       '#type' => 'number',
       '#title' => t('Size of textfield'),
@@ -68,6 +76,10 @@ public function settingsSummary() {
 
     $operators = $this->getMatchOperatorOptions();
     $summary[] = t('Autocomplete matching: @match_operator', ['@match_operator' => $operators[$this->getSetting('match_operator')]]);
+    $match_size = $this->getSetting('match_size');
+    if ($match_size) {
+      $summary[] = t('Autocomplete suggestion list size: @size', ['@size' => $match_size]);
+    }
     $summary[] = t('Textfield size: @size', ['@size' => $this->getSetting('size')]);
     $placeholder = $this->getSetting('placeholder');
     if (!empty($placeholder)) {
@@ -88,7 +100,10 @@ public function formElement(FieldItemListInterface $items, $delta, array $elemen
     $referenced_entities = $items->referencedEntities();
 
     // Append the match operation to the selection settings.
-    $selection_settings = $this->getFieldSetting('handler_settings') + ['match_operator' => $this->getSetting('match_operator')];
+    $selection_settings = $this->getFieldSetting('handler_settings') + [
+      'match_operator' => $this->getSetting('match_operator'),
+      'match_size' => $this->getSetting('match_size'),
+    ];
 
     $element += [
       '#type' => 'entity_autocomplete',
diff --git a/core/modules/system/system.post_update.php b/core/modules/system/system.post_update.php
index 0662853339..a49c4347a3 100644
--- a/core/modules/system/system.post_update.php
+++ b/core/modules/system/system.post_update.php
@@ -10,6 +10,7 @@
 use Drupal\Core\Entity\Display\EntityViewDisplayInterface;
 use Drupal\Core\Entity\Entity\EntityFormDisplay;
 use Drupal\Core\Entity\Entity\EntityViewDisplay;
+use Drupal\Core\Field\Plugin\Field\FieldWidget\EntityReferenceAutocompleteWidget;
 
 /**
  * Re-save all configuration entities to recalculate dependencies.
@@ -169,3 +170,32 @@ function system_post_update_extra_fields(&$sandbox = NULL) {
   $config_entity_updater->update($sandbox, 'entity_form_display', $callback);
   $config_entity_updater->update($sandbox, 'entity_view_display', $callback);
 }
+
+/**
+ * Populate the new 'match_size' setting for entity reference autocomplete widget.
+ */
+function system_post_update_entity_reference_autocomplete_match_size(&$sandbox = NULL) {
+  $config_entity_updater = \Drupal::classResolver(ConfigEntityUpdater::class);
+  /** @var \Drupal\Core\Field\WidgetPluginManager $field_widget_manager */
+  $field_widget_manager = \Drupal::service('plugin.manager.field.widget');
+
+  $callback = function (EntityDisplayInterface $display) use ($field_widget_manager) {
+    $needs_save = FALSE;
+    foreach ($display->getComponents() as $field_name => $component) {
+      if (empty($component['type'])) {
+        continue;
+      }
+
+      $plugin_definition = $field_widget_manager->getDefinition($component['type'], FALSE);
+      if ($plugin_definition['class'] === EntityReferenceAutocompleteWidget::class || is_subclass_of($plugin_definition['class'], EntityReferenceAutocompleteWidget::class)) {
+        $component['settings']['match_size'] = 10;
+        $display->setComponent($field_name, $component);
+        $needs_save = TRUE;
+      }
+    }
+
+    return $needs_save;
+  };
+
+  $config_entity_updater->update($sandbox, 'entity_form_display', $callback);
+}
diff --git a/core/profiles/demo_umami/config/install/core.entity_form_display.media.audio.default.yml b/core/profiles/demo_umami/config/install/core.entity_form_display.media.audio.default.yml
index 38efab24a7..67cb502e4f 100644
--- a/core/profiles/demo_umami/config/install/core.entity_form_display.media.audio.default.yml
+++ b/core/profiles/demo_umami/config/install/core.entity_form_display.media.audio.default.yml
@@ -51,6 +51,7 @@ content:
     weight: 5
     settings:
       match_operator: CONTAINS
+      match_size: 10
       size: 60
       placeholder: ''
     region: content
diff --git a/core/profiles/demo_umami/config/install/core.entity_form_display.media.file.default.yml b/core/profiles/demo_umami/config/install/core.entity_form_display.media.file.default.yml
index 16536c8127..dad7cb4eba 100644
--- a/core/profiles/demo_umami/config/install/core.entity_form_display.media.file.default.yml
+++ b/core/profiles/demo_umami/config/install/core.entity_form_display.media.file.default.yml
@@ -51,6 +51,7 @@ content:
     weight: 5
     settings:
       match_operator: CONTAINS
+      match_size: 10
       size: 60
       placeholder: ''
     region: content
diff --git a/core/profiles/demo_umami/config/install/core.entity_form_display.media.image.default.yml b/core/profiles/demo_umami/config/install/core.entity_form_display.media.image.default.yml
index 06ab5d285e..aba4fb9a5e 100644
--- a/core/profiles/demo_umami/config/install/core.entity_form_display.media.image.default.yml
+++ b/core/profiles/demo_umami/config/install/core.entity_form_display.media.image.default.yml
@@ -53,6 +53,7 @@ content:
     weight: 5
     settings:
       match_operator: CONTAINS
+      match_size: 10
       size: 60
       placeholder: ''
     region: content
diff --git a/core/profiles/demo_umami/config/install/core.entity_form_display.media.remote_video.default.yml b/core/profiles/demo_umami/config/install/core.entity_form_display.media.remote_video.default.yml
index d0924b7042..cbe6984000 100644
--- a/core/profiles/demo_umami/config/install/core.entity_form_display.media.remote_video.default.yml
+++ b/core/profiles/demo_umami/config/install/core.entity_form_display.media.remote_video.default.yml
@@ -44,6 +44,7 @@ content:
     weight: 4
     settings:
       match_operator: CONTAINS
+      match_size: 10
       size: 60
       placeholder: ''
     region: content
diff --git a/core/profiles/demo_umami/config/install/core.entity_form_display.media.video.default.yml b/core/profiles/demo_umami/config/install/core.entity_form_display.media.video.default.yml
index 6658cb930f..37a2d83e71 100644
--- a/core/profiles/demo_umami/config/install/core.entity_form_display.media.video.default.yml
+++ b/core/profiles/demo_umami/config/install/core.entity_form_display.media.video.default.yml
@@ -51,6 +51,7 @@ content:
     weight: 5
     settings:
       match_operator: CONTAINS
+      match_size: 10
       size: 60
       placeholder: ''
     region: content
diff --git a/core/profiles/demo_umami/config/install/core.entity_form_display.node.article.default.yml b/core/profiles/demo_umami/config/install/core.entity_form_display.node.article.default.yml
index 50db6035b7..ccbbbc13ec 100644
--- a/core/profiles/demo_umami/config/install/core.entity_form_display.node.article.default.yml
+++ b/core/profiles/demo_umami/config/install/core.entity_form_display.node.article.default.yml
@@ -46,6 +46,7 @@ content:
     region: content
     settings:
       match_operator: CONTAINS
+      match_size: 10
       size: 60
       placeholder: ''
     third_party_settings: {  }
@@ -96,6 +97,7 @@ content:
     region: content
     settings:
       match_operator: CONTAINS
+      match_size: 10
       size: 60
       placeholder: ''
     third_party_settings: {  }
diff --git a/core/profiles/demo_umami/config/install/core.entity_form_display.node.page.default.yml b/core/profiles/demo_umami/config/install/core.entity_form_display.node.page.default.yml
index 9a896e5a33..a26711b1a4 100644
--- a/core/profiles/demo_umami/config/install/core.entity_form_display.node.page.default.yml
+++ b/core/profiles/demo_umami/config/install/core.entity_form_display.node.page.default.yml
@@ -75,6 +75,7 @@ content:
     region: content
     settings:
       match_operator: CONTAINS
+      match_size: 10
       size: 60
       placeholder: ''
     third_party_settings: {  }
diff --git a/core/profiles/demo_umami/config/install/core.entity_form_display.node.recipe.default.yml b/core/profiles/demo_umami/config/install/core.entity_form_display.node.recipe.default.yml
index 5c3431958d..3330c8f502 100644
--- a/core/profiles/demo_umami/config/install/core.entity_form_display.node.recipe.default.yml
+++ b/core/profiles/demo_umami/config/install/core.entity_form_display.node.recipe.default.yml
@@ -77,6 +77,7 @@ content:
     weight: 6
     settings:
       match_operator: CONTAINS
+      match_size: 10
       size: 60
       placeholder: ''
     third_party_settings: {  }
@@ -102,6 +103,7 @@ content:
     weight: 7
     settings:
       match_operator: CONTAINS
+      match_size: 10
       size: 60
       placeholder: ''
     third_party_settings: {  }
@@ -153,6 +155,7 @@ content:
     weight: 12
     settings:
       match_operator: CONTAINS
+      match_size: 10
       size: 60
       placeholder: ''
     region: content
diff --git a/core/profiles/standard/config/install/core.entity_form_display.node.article.default.yml b/core/profiles/standard/config/install/core.entity_form_display.node.article.default.yml
index 99d0f60827..0bb8be5a31 100644
--- a/core/profiles/standard/config/install/core.entity_form_display.node.article.default.yml
+++ b/core/profiles/standard/config/install/core.entity_form_display.node.article.default.yml
@@ -53,6 +53,7 @@ content:
     region: content
     settings:
       match_operator: CONTAINS
+      match_size: 10
       size: 60
       placeholder: ''
     third_party_settings: {  }
@@ -97,6 +98,7 @@ content:
     region: content
     settings:
       match_operator: CONTAINS
+      match_size: 10
       size: 60
       placeholder: ''
     third_party_settings: {  }
diff --git a/core/profiles/standard/config/install/core.entity_form_display.node.page.default.yml b/core/profiles/standard/config/install/core.entity_form_display.node.page.default.yml
index 682f1a550c..eedced9da4 100644
--- a/core/profiles/standard/config/install/core.entity_form_display.node.page.default.yml
+++ b/core/profiles/standard/config/install/core.entity_form_display.node.page.default.yml
@@ -68,6 +68,7 @@ content:
     region: content
     settings:
       match_operator: CONTAINS
+      match_size: 10
       size: 60
       placeholder: ''
     third_party_settings: {  }
diff --git a/core/tests/Drupal/FunctionalJavascriptTests/EntityReference/EntityReferenceAutocompleteWidgetTest.php b/core/tests/Drupal/FunctionalJavascriptTests/EntityReference/EntityReferenceAutocompleteWidgetTest.php
index 3d0b402a48..8c8a618a11 100644
--- a/core/tests/Drupal/FunctionalJavascriptTests/EntityReference/EntityReferenceAutocompleteWidgetTest.php
+++ b/core/tests/Drupal/FunctionalJavascriptTests/EntityReference/EntityReferenceAutocompleteWidgetTest.php
@@ -97,6 +97,30 @@ public function testEntityReferenceAutocompleteWidget() {
     $this->assertCount(1, $results);
     $assert_session->pageTextContains('Test page');
     $assert_session->pageTextNotContains('Page test');
+
+    // Change the size of the result set.
+    entity_get_form_display('node', 'page', 'default')
+      ->setComponent($field_name, [
+        'type' => 'entity_reference_autocomplete',
+        'settings' => [
+          'match_size' => 1,
+        ],
+      ])
+      ->save();
+
+    $this->drupalGet('node/add/page');
+    $page = $this->getSession()->getPage();
+
+    $autocomplete_field = $page->findField($field_name . '[0][target_id]');
+    $autocomplete_field->setValue('Test');
+    $this->getSession()->getDriver()->keyDown($autocomplete_field->getXpath(), ' ');
+    $assert_session->waitOnAutocomplete();
+
+    $results = $page->findAll('css', '.ui-autocomplete li');
+
+    $this->assertCount(1, $results);
+    $assert_session->pageTextContains('Test page');
+    $assert_session->pageTextNotContains('Page test');
   }
 
 }
diff --git a/core/tests/Drupal/FunctionalTests/Rest/EntityFormDisplayResourceTestBase.php b/core/tests/Drupal/FunctionalTests/Rest/EntityFormDisplayResourceTestBase.php
index a44534a31f..d154acf19c 100644
--- a/core/tests/Drupal/FunctionalTests/Rest/EntityFormDisplayResourceTestBase.php
+++ b/core/tests/Drupal/FunctionalTests/Rest/EntityFormDisplayResourceTestBase.php
@@ -109,6 +109,7 @@ protected function getExpectedNormalizedEntity() {
           'weight' => 5,
           'settings' => [
             'match_operator' => 'CONTAINS',
+            'match_size' => 10,
             'size' => 60,
             'placeholder' => '',
           ],
