---
title: Migrate autocomplete
slug: graph/docs/migrate-autocomplete
docTags: 
createdAt: 2026-07-30T20:30:18.888Z
---

Autocomplete (type-ahead) suggests possible completions as users type, helping them find content faster and reducing empty search results.

:::hint{type="warning"}
**Important**
Search & Navigation and Graph autocomplete work differently, so you cannot migrate them directly.

- **Search & Navigation autocomplete** – Suggests search phrases from two sources: phrases you add manually in the Admin UI, and phrases from previous searches that returned results.
- **Graph autocomplete** – Suggests values from your content fields (such as page titles, product names, or tags). It reads from the content stored in your CMS.

Because they use different data sources, you cannot transfer your Search & Navigation autocomplete phrases or settings to Graph. Configure Graph autocomplete as a new feature. Verify that the Graph approach meets your needs before starting.
:::

## Key differences

| Feature             | Search & Navigation                                        | Optimizely Graph                                                       |
| ------------------- | ---------------------------------------------------------- | ---------------------------------------------------------------------- |
| **Data source**     | Editorial (manually added) and statistical (past searches) | Indexed content field values                                           |
| **Configuration**   | Admin UI (Manage > Optimize > Autocomplete)                | No configuration needed                                                |
| **API**             | REST endpoint (`/_autocomplete`)                           | GraphQL `autocomplete` field                                           |
| **Field targeting** | No field selection (suggests search phrases)               | Select specific `StringFilterInput` fields                             |
| **Matching**        | Beginning of phrase only (prefix matching)                 | Prefix matching on each word (preserves word order)                    |
| **Character limit** | No limit                                                   | Maximum 10 characters per word                                         |
| **Filtering**       | `tags` and `size` parameter (default: 3, max: 10)          | GraphQL `where` clause and `limit` per field (default: 10, max: 1,000) |

## Configure Graph autocomplete

Graph autocomplete requires no additional configuration. It works on indexed content as soon as the sync completes. For full implementation details, parameters, and examples, see the [Graph autocomplete documentation](docId\:aM0WpNsNXe_n26IhkX5sG).

The following query demonstrates a basic autocomplete request:

```graphql
{
  StandardPage(limit: 0) {
    autocomplete {
      MetaKeywords(value: "Alloy", limit: 3)
    }
  }
}
```

The following query demonstrates a response to the previous basic autocomplete request:

```json
{
  "data": {
    "StandardPage": {
      "autocomplete": {
        "MetaKeywords": [
          "Alloy Track",
          "Alloy Events",
          "Alloy News"
        ]
      }
    }
  }
}
```

## Use autocomplete with searchable fields

Graph autocomplete works only on fields typed as `StringFilterInput`. Most CMS string properties (such as `Name`) are indexed as `SearchableStringFilterInput` by default, which does not support autocomplete.

To use autocomplete on a searchable field, create a new field that returns the same value using the [Conventions API](docId\:fE9AHfL6P-6IIittnLBgz) `IncludeField` method. Fields added through the `IncludeField` method are indexed as `StringFilterInput`, which supports autocomplete.

For example, add a method to your content type that returns the value you want to use for autocomplete:

```csharp
public string AutocompleteName() => PageName;
```

Then register it using the Conventions API in an initializable module:

```csharp
conventionRepo.ForInstancesOf<ProductPage>()
    .IncludeField(x => x.AutocompleteName());
```

After syncing content, the `AutocompleteName` field displays as `StringFilterInput` in GraphQL and supports autocomplete:

```graphql
{
  ProductPage(limit: 0) {
    autocomplete {
      AutocompleteName(value: "Alloy", limit: 3)
    }
  }
}
```
