ArcGIS Pro 3.4 API Reference Guide
ArcGIS.Core.Data.DDL Namespace / SchemaBuilder Class / Create Method / Create(IndexDescription) Method
Indicates the ArcGIS.Core.Data.Index to be created.
Example

In This Topic
    Create(IndexDescription) Method
    In This Topic
    Enqueue the create operation on the object referred to by the IndexDescription. This method must be called on the MCT. Use QueuedTask.Run.
    Syntax
    public void Create( 
       IndexDescription indexDescription
    )
    Public Overloads Sub Create( _
       ByVal indexDescription As IndexDescription _
    ) 

    Parameters

    indexDescription
    Indicates the ArcGIS.Core.Data.Index to be created.
    Exceptions
    ExceptionDescription
    indexDescription is null.
    Memory ArcGIS.Core.Data.Geodatabase does not support indexes.
    Attribute indexes must be ascending on KnowledgeGraphs
    User defined spatial indexes cannot be added to a knowledge graph
    This method or property must be called within the lambda passed to QueuedTask.Run.
    Remarks
    Attribute indexes being added to a knowledge graph dataset must be ascending or a System.InvalidOperationException will be thrown.
    User-defined spatial indexes cannot be added to a knowledge graph dataset. The system automatically creates the spatial index(es) when the dataset is created.
    Example
    Creating a table with index from scratch
    public void CreatingTableWithIndex(SchemaBuilder schemaBuilder)
    {
        FieldDescription nameFieldDescription = FieldDescription.CreateStringField("Name", 50);
        FieldDescription addressFieldDescription = FieldDescription.CreateStringField("Address", 200);
    
        // Creating a feature class, 'Buildings' with two fields
        TableDescription tableDescription = new TableDescription("Buildings", new List<FieldDescription>() { nameFieldDescription, addressFieldDescription });
    
        // Enqueue DDL operation to create a table
        TableToken tableToken = schemaBuilder.Create(tableDescription);
    
        // Creating an attribute index named as 'Idx'
        AttributeIndexDescription attributeIndexDescription = new AttributeIndexDescription("Idx", new TableDescription(tableToken),
          new List<string> { nameFieldDescription.Name, addressFieldDescription.Name });
    
        // Enqueue DDL operation to create an attribute index
        schemaBuilder.Create(attributeIndexDescription);
    
        // Execute build indexes operation
        bool isBuildSuccess = schemaBuilder.Build();
    }
    Adding indexes in pre-existing dataset
    public void AddingIndexes(SchemaBuilder schemaBuilder, FeatureClassDefinition featureClassDefinition)
    {
        // Field names to add in the attribute index
        string fieldName = featureClassDefinition.GetFields().First(f => f.AliasName.Contains("Name")).Name;
        string fieldAddress = featureClassDefinition.GetFields().First(f => f.AliasName.Contains("Address")).Name;
    
        // Creating an attribute index with index name 'Idx' and two participating fields' name
        AttributeIndexDescription attributeIndexDescription = new AttributeIndexDescription("Idx", new TableDescription(featureClassDefinition), new List<string> { fieldName, fieldAddress });
    
        // Enqueue DDL operation for an attribute index creation 
        schemaBuilder.Create(attributeIndexDescription);
    
        // Creating the spatial index 
        SpatialIndexDescription spatialIndexDescription = new SpatialIndexDescription(new FeatureClassDescription(featureClassDefinition));
    
        // Enqueue DDL operation for the spatial index creation
        schemaBuilder.Create(spatialIndexDescription);
    
        // Execute build indexes operation
        bool isBuildSuccess = schemaBuilder.Build();
    
        if (!isBuildSuccess)
        {
            IReadOnlyList<string> errors = schemaBuilder.ErrorMessages;
            // Iterate and handle errors 
        }
    }
    Create Attribute Indexes on KG Schemas with SchemaBuilder
    await QueuedTask.Run(() =>
    {
      using (var kg = GetKnowledgeGraph())
      {
        if (kg == null)
          return;
    
        var entity_name = "PhoneCall";
    
        //indexes are managed on the GDB objects...
        var entity_table_def = kg.GetDefinition<TableDefinition>(entity_name);
        var entity_table_desc = new TableDescription(entity_table_def);
    
    
        var entity_table_flds = entity_table_def.GetFields();
        AttributeIndexDescription attr_index1 = null;
        AttributeIndexDescription attr_index2 = null;
        foreach (var fld in entity_table_flds)
        {
          //index the first string field
          if (fld.FieldType == FieldType.String && attr_index1 == null)
          {
            if (fld.Name == "ESRI__ID")//special case
              continue;
            //Index _must_ be ascending for KG
            attr_index1 = new AttributeIndexDescription(
              "Index1", entity_table_desc, new List<string> { fld.Name })
            {
              IsAscending = true
            };
          }
          //index the first numeric field (if there is one)
          if ((fld.FieldType == FieldType.BigInteger ||
               fld.FieldType == FieldType.Integer ||
               fld.FieldType == FieldType.Single ||
               fld.FieldType == FieldType.SmallInteger ||
               fld.FieldType == FieldType.Double) && attr_index2 == null)
          {
            attr_index2 = new AttributeIndexDescription(
              "Index2", entity_table_desc, new List<string> { fld.Name })
            {
              IsAscending = true,
              IsUnique = true //optional - unique if all values are to be unique in the index
            };
          }
          if (attr_index1 != null && attr_index2 != null) break;
        }
    
        if (attr_index1 == null && attr_index2 == null)
          return; //nothing to index
    
        //Run the schema builder
        try
        {
          SchemaBuilder sb = new(kg);
          if (attr_index1 != null)
            sb.Create(attr_index1);
          if (attr_index2 != null)
            sb.Create(attr_index2);
          if (!kg.ApplySchemaEdits(sb))
          {
            var err_msg = string.Join(",", sb.ErrorMessages.ToArray());
            System.Diagnostics.Debug.WriteLine($"Create index error: {err_msg}");
          }
        }
        catch (Exception ex)
        {
          System.Diagnostics.Debug.WriteLine(ex.ToString());
        }
      }
    });
    
    Requirements

    Target Platforms: Windows 11, Windows 10

    ArcGIS Pro version: 3.1 or higher.
    See Also