gpt4 book ai didi

c# - 如何在 blob 容器中使用 azure 搜索搜索最新文件中的匹配数据 C#

转载 作者:行者123 更新时间:2023-12-03 04:14:19 30 4
gpt4 key购买 nike

我有一个名为dataTest的 azure blob容器,其中有根据年/月/日期创建的多个文件夹。

dataTest/rawjson/2019/01/25/01/demo1.json

dataTest/rawjson/2018/12/30/02/demo2.json

我想从最新的文件夹路径获取文件 -

dataTest/rawjson/2019/01/25/01/demo1.json

如何获取最新路径(dataTest/rawjson/2019/01/25/01/demo1.json)

当我将输入作为 dataTest/rawjson 传递时

我想使用 azure search 读取数据,我们需要通过导入此 blob 容器来创建一个索引

我想知道有没有办法动态传递这个blob路径并使用azure search获取最新的文件数据?

azure搜索之前,我使用下面的C#代码来获取最新文件

CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
CloudBlobContainer container = blobClient.GetContainerReference("dataTest");

string directoryreference = "dataTest/rawjson/events";

var blobDirectory = container.GetDirectoryReference(directoryreference);
IEnumerable<IListBlobItem> items = blobDirectory.ListBlobs(useFlatBlobListing: true);

string blobFilePath = String.Empty;
foreach (var blob in items.OfType<CloudBlob>()

.OrderByDescending(b => b.Properties.LastModified))
{
string blobFileFullPath = Path.GetDirectoryName(blob.Name).Replace("\\", "/");
blobFilePath = Path.GetDirectoryName(blobFileFullPath).Replace("\\", "/");
if (blobFilePath != null)
{ break; }

}
var blobFileDirectory = container.GetDirectoryReference(blobFilePath);
IEnumerable<IListBlobItem> fileitems = blobFileDirectory.ListBlobs(useFlatBlobListing: true);

最佳答案

Blob 中没有物理文件夹,“文件夹”只是 Blob 路径的一部分。每个 IListBlobItem 都将是一个 CloudBlockBlob、一个 CloudPageBlob 或一个 CloudBlobDirectory。

转换为 block 或页面 blob 或其共享基类 CloudBlob(最好使用 as 关键字并检查 null)后,您可以通过 blockBlob.Properties.LastModified 访问修改日期。

请注意,您的实现将对容器中的所有 blob 进行 O(n) 扫描,如果有数十万个文件,这可能需要一段时间。不过,目前还没有办法对 blob 存储进行更有效的查询(除非您滥用文件命名并以较新的日期按字母顺序排在前面的方式对日期进行编码)。实际上,如果您需要更好的查询性能,我建议您保留一个数据库表,将所有文件列表表示为行,其中包含用于搜索的索引 DateModified 列和带有 blob 路径的列,以便轻松访问文件。

更好的方法是结合使用 Azure 表存储和 Blob 存储。在这种方法中,当创建 blob 时,您可以将一个条目写入 Azure 表存储中。此外,当更新 blob 时,您可以在 Azure 表存储中创建另一个条目。这样您就能够建立审计跟踪。

如果您有兴趣保留 blob 的历史记录(例如用户上传了一个文本文件,然后上传了另一个文本文件,并且您想要跟踪这两个文本文件的内容),那么您可以做的是拍摄快照更新之前的 blob。它将执行的操作是创建现有 blob 的只读副本。创建快照后,该过程会返回一个日期/时间值,您可以将其与更新的条目一起存储在表存储中。

关于c# - 如何在 blob 容器中使用 azure 搜索搜索最新文件中的匹配数据 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54476333/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com