Skip to main content
Batch process all your records to store structured outputs in an Azure AI Search account. The requirements are as follows. The following video shows how to fulfill the minimum set of Azure AI Search requirements:
Here are some more details about these requirements:
  • The endpoint and API key for Azure AI Search. Create an endpoint and API key.
  • The name of the index in Azure AI Search. Create an index.
    The Azure AI Search index that you use must have an index schema that is compatible with the schema of the documents that Unstructured produces for you. Unstructured cannot provide a schema that is guaranteed to work in all circumstances. This is because these schemas will vary based on your source files’ types; how you want Unstructured to partition, chunk, and generate embeddings; any custom post-processing code that you run; and other factors. You can adapt the following index schema example for your own needs. Be sure to replace <number-of-dimensions> (in three locations in the following example) with the number of dimensions of the embedding model you are using:
    {
      "name": "elements-index",
      "fields": [
        {
          "name": "id",
          "type": "Edm.String",
          "key": true
        },
        {
          "name": "record_id",
          "type": "Edm.String",
          "filterable": true
        },
        {
          "name": "element_id",
          "type": "Edm.String"
        },
        {
          "name": "text",
          "type": "Edm.String",
          "searchable": true
        },
        {
          "name": "type",
          "type": "Edm.String"
        },
        {
          "name": "metadata",
          "type": "Edm.ComplexType",
          "fields": [
            {
              "name": "orig_elements",
              "type": "Edm.String"
            },
            {
              "name": "category_depth",
              "type": "Edm.Int32"
            },
            {
              "name": "parent_id",
              "type": "Edm.String"
            },
            {
              "name": "attached_to_filename",
              "type": "Edm.String"
            },
            {
              "name": "filetype",
              "type": "Edm.String"
            },
            {
              "name": "last_modified",
              "type": "Edm.DateTimeOffset"
            },
            {
              "name": "is_continuation",
              "type": "Edm.Boolean"
            },
            {
              "name": "file_directory",
              "type": "Edm.String"
            },
            {
              "name": "filename",
              "type": "Edm.String"
            },
            {
              "name": "data_source",
              "type": "Edm.ComplexType",
              "fields": [
                {
                  "name": "url",
                  "type": "Edm.String"
                },
                {
                  "name": "version",
                  "type": "Edm.String"
                },
                {
                  "name": "date_created",
                  "type": "Edm.DateTimeOffset"
                },
                {
                  "name": "date_modified",
                  "type": "Edm.DateTimeOffset"
                },
                {
                  "name": "date_processed",
                  "type": "Edm.DateTimeOffset"
                },
                {
                  "name": "permissions_data",
                  "type": "Edm.String"
                },
                {
                  "name": "record_locator",
                  "type": "Edm.String"
                }
              ]
            },
            {
              "name": "coordinates",
              "type": "Edm.ComplexType",
              "fields": [
                {
                  "name": "system",
                  "type": "Edm.String"
                },
                {
                  "name": "layout_width",
                  "type": "Edm.Double"
                },
                {
                  "name": "layout_height",
                  "type": "Edm.Double"
                },
                {
                  "name": "points",
                  "type": "Edm.String"
                }
              ]
            },
            {
              "name": "languages",
              "type": "Collection(Edm.String)"
            },
            {
              "name": "page_number",
              "type": "Edm.String"
            },
            {
              "name": "links",
              "type": "Collection(Edm.String)"
            },
            {
              "name": "page_name",
              "type": "Edm.String"
            },
            {
              "name": "link_urls",
              "type": "Collection(Edm.String)"
            },
            {
              "name": "link_texts",
              "type": "Collection(Edm.String)"
            },
            {
              "name": "sent_from",
              "type": "Collection(Edm.String)"
            },
            {
              "name": "sent_to",
              "type": "Collection(Edm.String)"
            },
            {
              "name": "subject",
              "type": "Edm.String"
            },
            {
              "name": "section",
              "type": "Edm.String"
            },
            {
              "name": "header_footer_type",
              "type": "Edm.String"
            },
            {
              "name": "emphasized_text_contents",
              "type": "Collection(Edm.String)"
            },
            {
              "name": "emphasized_text_tags",
              "type": "Collection(Edm.String)"
            },
            {
              "name": "text_as_html",
              "type": "Edm.String"
            },
            {
              "name": "regex_metadata",
              "type": "Edm.String"
            },
            {
              "name": "detection_class_prob",
              "type": "Edm.Double"
            }
          ]
        },
        {
          "name": "embeddings",
          "type": "Collection(Edm.Single)",
          "dimensions": <number-of-dimensions>,
          "vectorSearchProfile": "embeddings-config-profile"
        }
      ],
      "vectorSearch": {
        "algorithms": [
          {
            "name": "hnsw-<number-of-dimensions>",
            "kind": "hnsw",
            "hnswParameters": {
              "m": 4,
              "efConstruction": 400,
              "efSearch": 500,
              "metric": "cosine"
            }
          }
        ],
        "profiles": [
          {
            "name": "embeddings-config-profile",
            "algorithm": "hnsw-<number-of-dimensions>"
          }
        ]
      },
      "semantic": {
        "configurations": [
          {
            "name": "default-semantic-config",
            "prioritizedFields": {
              "titleField": null,
              "prioritizedContentFields": [
                { "fieldName": "text" }
              ],
              "prioritizedKeywordsFields": []
            }
          }
        ]
      }
    }
    
    See also:
The Azure AI Search connector dependencies:
CLI, Python
pip install "unstructured-ingest[azure-ai-search]"
You might also need to install additional dependencies, depending on your needs. Learn more. These environment variables:
  • AZURE_SEARCH_ENDPOINT - The endpoint URL for Azure AI Search, represented by --endpoint (CLI) or endpoint (Python).
  • AZURE_SEARCH_API_KEY - The API key for Azure AI Search, represented by --key (CLI) or key (Python).
  • AZURE_SEARCH_INDEX - The name of the index for Azure AI Search, represented by --index (CLI) or index (Python).
Now call the Unstructured CLI or Python. The source connector can be any of the ones supported. This example uses the local source connector. This example sends files to Unstructured for processing by default. To process files locally instead, see the instructions at the end of this page.
#!/usr/bin/env bash

# Chunking and embedding are optional.

unstructured-ingest \
  local \
    --input-path $LOCAL_FILE_INPUT_DIR \
    --output-dir $LOCAL_FILE_OUTPUT_DIR \
    --chunk-elements \
    --embedding-provider huggingface \
    --num-processes 2 \
    --verbose \
    --partition-by-api \
    --api-key $UNSTRUCTURED_API_KEY \
    --partition-endpoint $UNSTRUCTURED_API_URL \
    --strategy hi_res \
    --additional-partition-args="{\"split_pdf_page\":\"true\", \"split_pdf_allow_failed\":\"true\", \"split_pdf_concurrency_level\": 15}" \
  azure-ai-search \
    --key $AZURE_SEARCH_API_KEY \
    --endpoint $AZURE_SEARCH_ENDPOINT \
    --index $AZURE_SEARCH_INDEX
For the Unstructured Ingest CLI and the Unstructured Ingest Python library, you can use the --partition-by-api option (CLI) or partition_by_api (Python) parameter to specify where files are processed:
  • To do local file processing, omit --partition-by-api (CLI) or partition_by_api (Python), or explicitly specify partition_by_api=False (Python). Local file processing does not use an Unstructured API key or API URL, so you can also omit the following, if they appear:
    • --api-key $UNSTRUCTURED_API_KEY (CLI) or api_key=os.getenv("UNSTRUCTURED_API_KEY") (Python)
    • --partition-endpoint $UNSTRUCTURED_API_URL (CLI) or partition_endpoint=os.getenv("UNSTRUCTURED_API_URL") (Python)
    • The environment variables UNSTRUCTURED_API_KEY and UNSTRUCTURED_API_URL
  • To send files to the legacy Unstructured Partition Endpoint for processing, specify --partition-by-api (CLI) or partition_by_api=True (Python). Unstructured also requires an Unstructured API key and API URL, by adding the following:
    • --api-key $UNSTRUCTURED_API_KEY (CLI) or api_key=os.getenv("UNSTRUCTURED_API_KEY") (Python)
    • --partition-endpoint $UNSTRUCTURED_API_URL (CLI) or partition_endpoint=os.getenv("UNSTRUCTURED_API_URL") (Python)
    • The environment variables UNSTRUCTURED_API_KEY and UNSTRUCTURED_API_URL, representing your API key and API URL, respectively.
    You must specify the API URL only if you are not using the default API URL for Unstructured Ingest, which applies to Let’s Go, Pay-As-You-Go, and Business SaaS accounts.The default API URL for Unstructured Ingest is https://api.unstructuredapp.io/general/v0/general, which is the API URL for the legacyUnstructured Partition Endpoint. However, you should always use the URL that was provided to you when your Unstructured account was created. If you do not have this URL, email Unstructured Support at support@unstructured.io.If you do not have an API key, get one now.If you are using a Business account, the process for generating Unstructured API keys, and the Unstructured API URL that you use, are different. For instructions, see your Unstructured account administrator, or email Unstructured Support at support@unstructured.io.