上一篇文章 ( 使用
Azure.Search.Documents Azure Blob 搜尋中的 JSON 資料 -搜尋資料),我們搜尋了索引裡面的資料,其實您在新增一個資料(JSON FILE)
後,其實在每次更新索引的時候,也會把該資料放入索引中
在原本的設定中我們是設定五分鐘會做一次索引,關於設定部分可以參考 使用 Azure.Search.Documents
Azure Blob 搜尋中的 JSON 資料 -建立環境

接下來,我們上傳一個檔案上去至 blob 資料中,但是這樣直接搜尋一錠是搜尋不到的,除非你真的很剛好馬上碰到做完索引
上傳一個 JSON, Id: USER9999
AddOneData(9999);
private static void AddOneData(int num)
{
var dir = AppDomain.CurrentDomain.BaseDirectory + "temp" + Path.DirectorySeparatorChar;
Directory.CreateDirectory(dir);
var u = new User { Birth = new DateTime(2022, 1, 1).AddDays(1), Email = "user" + num + "@gmail.com", Id = "USER" + num, Num = num, Memo = "測試資料" + num, Name = "當麻測試" + num };
System.IO.File.WriteAllText(dir + "data" + num + ".json", Newtonsoft.Json.JsonConvert.SerializeObject(u));
var blobClient = new Azure.Storage.Blobs.BlobClient(ConnectionString, "test1000", "data/" + "data" + num + ".json");
blobClient.Upload(dir + "data" + num + ".json", true);
}
重建索引 C# Code:
AddOneData(9999);
private static void AddOneData(int num)
{
var dir = AppDomain.CurrentDomain.BaseDirectory + "temp" + Path.DirectorySeparatorChar;
Directory.CreateDirectory(dir);
var u = new User { Birth = new DateTime(2022, 1, 1).AddDays(1), Email = "user" + num + "@gmail.com", Id = "USER" + num, Num = num, Memo = "測試資料" + num, Name = "當麻測試" + num };
System.IO.File.WriteAllText(dir + "data" + num + ".json", Newtonsoft.Json.JsonConvert.SerializeObject(u));
var blobClient = new Azure.Storage.Blobs.BlobClient(ConnectionString, "test1000", "data/" + "data" + num + ".json");
blobClient.Upload(dir + "data" + num + ".json", true);
}
在重建索引後,你在後 Azure 後台中,可以看到原本都是規律的五分鐘做索引,中間突然插入一個,並且他偵測到有一個檔案
之後搜尋出 USER9999* 就會搜尋到這個資料了
private static void RunIndexer()
{
var indexer = new Azure.Search.Documents.Indexes.SearchIndexerClient(new Uri(SearchServiceEndPoint), new Azure.AzureKeyCredential(AdminApiKey));
//這是對 indexer 做重新建立
var res = indexer.RunIndexer("azureblob-indexer").Content.ToString();
Console.WriteLine("Rebuild Indexer Result:");
Console.WriteLine(Newtonsoft.Json.JsonConvert.SerializeObject(res));
}

請注意,官方有提示 有 180 秒這個訊息,所以你即使你用程式呼叫,也不可以太過於頻繁 ,不然會有 Exception
Unhandled exception. Azure.RequestFailedException: On-demand indexer invocation is permitted every 180 seconds for
this service tier.
Status: 429
Content:
{"error":{"code":"","message":"On-demand indexer invocation is permitted every 180 seconds for this service tier."}}
reference:
https://docs.microsoft.com/zh-tw/azure/search/search-indexer-overview
https://docs.microsoft.com/zh-tw/azure/search/search-howto-run-reset-indexers?tabs=portal