|
| 1 | +import os |
| 2 | +from dotenv import load_dotenv |
| 3 | +from azure.core.credentials import AzureKeyCredential |
| 4 | +from azure.search.documents.indexes import SearchIndexClient, SearchIndexerClient |
| 5 | +from azure.search.documents.indexes.models import ( |
| 6 | + SearchIndexerDataSourceConnection, |
| 7 | + SearchIndexer, |
| 8 | + SearchIndex, |
| 9 | + SimpleField, |
| 10 | + SearchableField, |
| 11 | + SearchFieldDataType |
| 12 | +) |
| 13 | + |
| 14 | +# Load environment variables from .env file |
| 15 | +load_dotenv() |
| 16 | + |
| 17 | +# Retrieve environment variables |
| 18 | +SEARCH_ENDPOINT = os.getenv("SEARCH_ENDPOINT") |
| 19 | +SEARCH_API_KEY = os.getenv("SEARCH_API_KEY") |
| 20 | +BLOB_CONNECTION_STRING = os.getenv("BLOB_CONNECTION_STRING") |
| 21 | +BLOB_CONTAINER_NAME = os.getenv("BLOB_CONTAINER_NAME") |
| 22 | + |
| 23 | +# Validate required environment variables |
| 24 | +required_vars = [SEARCH_ENDPOINT, SEARCH_API_KEY, BLOB_CONNECTION_STRING, BLOB_CONTAINER_NAME] |
| 25 | +if any(var is None for var in required_vars): |
| 26 | + raise ValueError("One or more required environment variables are missing.") |
| 27 | + |
| 28 | +def create_search_resources(): |
| 29 | + """Create Azure AI Search resources: data source, index, and indexer.""" |
| 30 | + try: |
| 31 | + # Initialize SearchIndexClient for index operations |
| 32 | + index_client = SearchIndexClient( |
| 33 | + endpoint=SEARCH_ENDPOINT, |
| 34 | + credential=AzureKeyCredential(SEARCH_API_KEY) |
| 35 | + ) |
| 36 | + |
| 37 | + # Initialize SearchIndexerClient for data source and indexer operations |
| 38 | + indexer_client = SearchIndexerClient( |
| 39 | + endpoint=SEARCH_ENDPOINT, |
| 40 | + credential=AzureKeyCredential(SEARCH_API_KEY) |
| 41 | + ) |
| 42 | + |
| 43 | + # Define data source connection |
| 44 | + data_source = SearchIndexerDataSourceConnection( |
| 45 | + name="macae-blob-datasets", |
| 46 | + type="azureblob", |
| 47 | + connection_string=BLOB_CONNECTION_STRING, |
| 48 | + container={"name": BLOB_CONTAINER_NAME} |
| 49 | + ) |
| 50 | + indexer_client.create_or_update_data_source_connection(data_source) |
| 51 | + print("Data source 'macae-blob-datasets' created successfully.") |
| 52 | + |
| 53 | + # Define index schema |
| 54 | + index = SearchIndex( |
| 55 | + name="macae-index", |
| 56 | + fields=[ |
| 57 | + SimpleField(name="id", type=SearchFieldDataType.String, key=True), |
| 58 | + SearchableField(name="content", type=SearchFieldDataType.String), |
| 59 | + SearchableField(name="metadata", type=SearchFieldDataType.String) |
| 60 | + ] |
| 61 | + ) |
| 62 | + index_client.create_or_update_index(index) |
| 63 | + print("Index 'macae-index' created successfully.") |
| 64 | + |
| 65 | + # Define indexer |
| 66 | + indexer = SearchIndexer( |
| 67 | + name="macae-indexer", |
| 68 | + data_source_name="macae-blob-datasets", |
| 69 | + target_index_name="macae-index" |
| 70 | + ) |
| 71 | + indexer_client.create_or_update_indexer(indexer) |
| 72 | + print("Indexer 'macae-indexer' created successfully.") |
| 73 | + |
| 74 | + except Exception as e: |
| 75 | + print(f"An error occurred while creating search resources: {e}") |
| 76 | + |
| 77 | +if __name__ == "__main__": |
| 78 | + create_search_resources() |
0 commit comments