diff --git a/src/Plugin/search_api/processor/FullAdministrativeArea.php b/src/Plugin/search_api/processor/FullAdministrativeArea.php
new file mode 100644
index 0000000..b976b4b
--- /dev/null
+++ b/src/Plugin/search_api/processor/FullAdministrativeArea.php
@@ -0,0 +1,143 @@
+<?php
+
+namespace Drupal\address\Plugin\search_api\processor;
+
+use Drupal\Component\Utility\Html;
+use Drupal\Core\Form\FormStateInterface;
+use Drupal\search_api\Processor\FieldsProcessorPluginBase;
+
+
+/**
+ * Makes searches case-insensitive on selected fields.
+ *
+ * @SearchApiProcessor(
+ *   id = "full_administrative_area",
+ *   label = @Translation("Address Field : Full Administrative Area"),
+ *   description = @Translation("Processor for appending address field full text value of administrative_area (state) to its abbreviation i.e., IL => IL Illinois."),
+ *   stages = {
+ *     "pre_index_save" = 0,
+ *     "preprocess_index" = -20,
+ *     "preprocess_query" = -20
+ *   }
+ * )
+ */
+class FullAdministrativeArea extends FieldsProcessorPluginBase {
+
+  /**
+   * The address format repository.
+   *
+   * @var \CommerceGuys\Addressing\AddressFormat\AddressFormatRepositoryInterface
+   */
+  protected $addressFormatRepository;
+
+  /**
+   * The subdivision repository.
+   *
+   * @var \CommerceGuys\Addressing\Subdivision\SubdivisionRepositoryInterface
+   */
+  protected $subdivisionRepository;
+
+  /**
+   * Stored Administrative Areas indexed by country_country.
+   *
+   * Used as a cache.
+   *
+   * @var array
+   */
+  protected $heapAdministrativeAreas = array();
+
+  /**
+   * {@inheritdoc}
+   */
+  public function __construct(array $configuration, $plugin_id, array $plugin_definition) {
+    parent::__construct($configuration, $plugin_id, $plugin_definition);
+    $this->addressFormatRepository = \Drupal::service('address.address_format_repository');
+    $this->subdivisionRepository = \Drupal::service('address.subdivision_repository');
+    $this->setHeapAdministrativeAreas('US');
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
+    $fields = $this->index->getFields();
+    $field_options = array();
+    $default_fields = array();
+    if (isset($this->configuration['fields'])) {
+      $default_fields = $this->configuration['fields'];
+    }
+    foreach ($fields as $name => $field) {
+      if (strpos($field->getPropertyPath(), ':administrative_area') === FALSE) {
+        continue;
+      }
+      if ($this->testType($field->getType())) {
+        $field_options[$name] = Html::escape($field->getPrefixedLabel());
+        if (!isset($this->configuration['fields']) && $this->testField($name, $field)) {
+          $default_fields[] = $name;
+        }
+      }
+    }
+
+    $form['fields'] = array(
+      '#type' => 'checkboxes',
+      '#title' => $this->t('Enable this processor on the following fields'),
+      '#options' => $field_options,
+      '#default_value' => $default_fields,
+    );
+    return $form;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function preprocessIndexItems(array $items) {
+    $administrative_areas = [];
+    $administrative_areas['US'] = $this->getHeapAdministrativeAreas('US');
+    foreach ($items as $item) {
+      foreach ($item->getFields() as $name => $field) {
+        if (!in_array($name, $this->configuration['fields'])) {
+          continue;
+        }
+        $field_name = current(explode(":", $field->getPropertyPath()));
+        $entity_adapter = $item->getOriginalObject();
+        $entity = $entity_adapter->getValue();
+        $field_values = $entity->get($field_name)->getValue();
+        $new_data = [];
+        foreach ($field_values as $delta => $field_value) {
+          $country_code = $field_value['country_code'];
+          $administrative_area = $field_value['administrative_area'];
+          if (empty($administrative_areas[$country_code])) {
+            $administrative_areas[$country_code] = $this->getHeapAdministrativeAreas($country_code);
+          }
+          $new_data[$delta] = $administrative_areas[$country_code][$administrative_area];
+        }
+        $field->setValues($new_data);
+        if ($this->testField($name, $field)) {
+          $this->processField($field);
+        }
+      }
+    }
+  }
+
+  public function getHeapAdministrativeAreas($country_code) {
+    if (!empty($this->heapAdministrativeAreas[$country_code])) {
+      return $this->heapAdministrativeAreas[$country_code];
+    }
+    $this->setHeapAdministrativeAreas($country_code);
+    return $this->heapAdministrativeAreas[$country_code];
+  }
+
+  protected function setHeapAdministrativeAreas($country_code, array $administrative_areas = []) {
+    if (empty($administrative_areas)) {
+      $addressFormat = $this->addressFormatRepository->get($country_code);
+      // Get the subdivisions for country.
+      $states = $this->subdivisionRepository->getAll([$country_code]);
+      foreach ($states as $state) {
+        $state_code = $state->getCode();
+        $administrative_areas[$state_code] = $state_code . ' - ' . $state->getName();
+      }
+    }
+    $this->heapAdministrativeAreas[$country_code] = $administrative_areas;
+  }
+
+}
