---
title: "Create a computed index field"
slug: "create-a-computed-index-field"
abstract: "Shows how you create a computed index field."
---
# Create a computed index field

In simple indexing scenarios, an indexer takes a text and places it in an index. Sometimes you need more control over how the data is stored or, more importantly, what data is stored. You use computed fields to look up data and to use logic to specify what Sitecore stores in an index.

For example, Sitecore uses computed fields to store the parsed *Created Date* of an item. A computed index field is processed for every Sitecore item that gets indexed.

To create a computed index field:

1. Create a class that implements the `Sitecore.ContentSearch.ComputedFields.IComputedIndexField` interface.
2. Implement simple string properties named `FieldName` and `ReturnType`.
    - The `FieldName` string is the name the field uses in the index.
    - The `FieldName` string is the name the field uses in the index. The `returnType` string refers to the Solr data type that the [Sitecore field type is mapped to](https://doc.sitecore.com/xp/en/developers/103/platform-administration-and-architecture/using-solr-field-name-resolution.html "Using Solr field name resolution") within `typeMatches`.

    You can find all available return types listed under `<typeMatches hint="raw:AddTypeMatch>`.

3. Implement a method called `ComputeFieldValue()`. This method accepts an argument that implements the `Sitecore.ContentSearch.IIndexable` interface and that specifies the data to index. It returns an object that represents the value for the field.

    Your class will look like this example:

    ```csharp
    public class IsClone : IComputedIndexField
    {
        public object ComputeFieldValue(IIndexable indexable)
        {
            Item item = (Item) (indexable as SitecoreIndexableItem);
            return item.IsClone;
        }

        public string FieldName { get; set; }

        public string ReturnType { get; set; }
    }
    ```

    > [!note]
    > Avoid use of local variables. Sitecore reuses the same instance of the computed index field class. The `ComputeFieldValue(IIndexable)` method can be invoked simultaneously for the same computed index field with different `IIndexable` arguments. This might lead to inconsistent data in the search index or errors during indexing. If you cannot avoid the use of local variables, use `[ThreadStatic]` or thread synchronization mechanisms.

4. In the `Sitecore.ContentSearch.Solr.DefaultIndexConfiguration.config` configuration file, locate `<fields hint="raw:AddComputedIndexField">`. You can read more about [adding the computed field to the configuration](https://doc.sitecore.com/xp/en/developers/103/platform-administration-and-architecture/using-solr-field-name-resolution.html "Using Solr field name resolution").
5. Add a `<field>` element to `AddComputedIndexField` and reference your custom class and assembly within it. The computed field is mapped to a Solr dynamic field, for example:

    ```xml
    <fields hint="raw:AddComputedIndexField">
        <field fieldName="nameOfComputedIndexField" returnType="string">
         YourNamespaceHere.ComputedFields.IsClone, YourNamespaceHere
        </field>
    </fields>
    ```

    > [!tip]
    > The example refers to the `IsClone` class defined in step 3 of this topic. The Sitecore computed field `nameOfComputedIndexField` is mapped to the Solr string type field.

6. Rebuild your search indexes using the Indexing Manager (accessed by opening the Indexing app from the control panel).