[Azure] C# 使用 Azure.Search.Documents Azure Blob 搜尋中的 JSON 資料 -更新(修改)資料是否會自動更新索引

2022-07-22

上一篇文章,我們談到如何刪除索引裡面的資料,因為你刪除 BLOB 中的資料其實索引不會同步,這時候我就好奇了如果我更改 BLOB 中的資料呢

是否索引裡的資料會跟著改變? 直接說結論 :



接下來,就是分享我測試的過程


1.更改資料,將 Id USER994 這筆資料中的 Memo 後面加上目前的時間字串

//Test for 994 private static void UpdateData(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+"-修改時間:"+DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), 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); }


2.記得更改後要重新執行索引,如果不執行就是等待 Azure 您那邊設定的時間決定


執行索引後就會發現,看到有一筆資料改變

重新執行索引的 C# code:


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)); }


3.之後印出來結果看一下,果然更改了


這一篇文章大概就是已測試跟分享心得為主,給之後有需要的人一個參考


reference:

https://stackoverflow.com/questions/28327003/how-to-remove-all-documents-in-index

https://stackoverflow.com/questions/54670922/azure-search-index-rebuild-strategy-using-c-sharp

https://docs.microsoft.com/zh-tw/azure/search/search-howto-reindex

https://docs.microsoft.com/zh-tw/azure/search/search-howto-create-indexers?tabs=portal


當麻許的碎念筆記 2014 | Donma Hsu Design.