async def create_indexer(): # create an index index_name = "hotels" fields = [ SimpleField(name="hotelId", type=SearchFieldDataType.String, key=True), SimpleField(name="baseRate", type=SearchFieldDataType.Double) ] index = SearchIndex(name=index_name, fields=fields) ind_client = SearchIndexerClient(service_endpoint, AzureKeyCredential(key)) async with ind_client: await ind_client.create_index(index) # [START create_indexer_async] # create a datasource container = SearchIndexerDataContainer(name='searchcontainer') data_source_connection = SearchIndexerDataSourceConnection( name="indexer-datasource", type="azureblob", connection_string=connection_string, container=container) async with ind_client: data_source = await ind_client.create_data_source_connection( data_source_connection) # create an indexer indexer = SearchIndexer(name="async-sample-indexer", data_source_name="async-indexer-datasource", target_index_name="indexer-hotels") async with indexers_client: result = await indexers_client.create_indexer(indexer) print("Create new Indexer - async-sample-indexer")
async def _prepare_indexer(self, endpoint, api_key, name="sample-indexer", ds_name="sample-datasource", id_name="hotels"): con_str = self.settings.AZURE_STORAGE_CONNECTION_STRING self.scrubber.register_name_pair(con_str, 'connection_string') container = SearchIndexerDataContainer(name='searchcontainer') data_source_connection = SearchIndexerDataSourceConnection( name=ds_name, type="azureblob", connection_string=con_str, container=container ) ds_client = SearchIndexerClient(endpoint, AzureKeyCredential(api_key)) ds = await ds_client.create_data_source_connection(data_source_connection) index_name = id_name fields = [ { "name": "hotelId", "type": "Edm.String", "key": True, "searchable": False }] index = SearchIndex(name=index_name, fields=fields) ind_client = SearchIndexClient(endpoint, AzureKeyCredential(api_key)) ind = await ind_client.create_index(index) return SearchIndexer(name=name, data_source_name=ds.name, target_index_name=ind.name)
def sample_indexer_workflow(): # Now that we have a datasource and an index, we can create an indexer. skillset_name = _create_skillset().name print("Skillset is created") ds_name = _create_datasource().name print("Data source is created") ind_name = _create_index().name print("Index is created") # we pass the data source, skillsets and targeted index to build an indexer parameters = IndexingParameters(configuration={"parsingMode": "jsonArray"}) indexer = SearchIndexer( name="hotel-data-indexer", data_source_name=ds_name, target_index_name=ind_name, skillset_name=skillset_name, parameters=parameters ) indexer_client = SearchIndexerClient(service_endpoint, AzureKeyCredential(key)) indexer_client.create_indexer(indexer) # create the indexer # to get an indexer result = indexer_client.get_indexer("hotel-data-indexer") print(result) # To run an indexer, we can use run_indexer() indexer_client.run_indexer(result.name) # Using create or update to schedule an indexer schedule = IndexingSchedule(interval=datetime.timedelta(hours=24)) result.schedule = schedule updated_indexer = indexer_client.create_or_update_indexer(result) print(updated_indexer) # get the status of an indexer indexer_client.get_indexer_status(updated_indexer.name)
def _prepare_indexer(self, client, index_client, storage_cs, name, container_name): data_source_connection = SearchIndexerDataSourceConnection( name=f"{name}-ds", type="azureblob", connection_string=storage_cs, container=SearchIndexerDataContainer(name=container_name)) ds = client.create_data_source_connection(data_source_connection) fields = [{ "name": "hotelId", "type": "Edm.String", "key": True, "searchable": False }] index = SearchIndex(name=f"{name}-hotels", fields=fields) ind = index_client.create_index(index) return SearchIndexer(name=name, data_source_name=ds.name, target_index_name=ind.name)