【问题标题】:Pattern search in Azure blob file namesAzure blob 文件名中的模式搜索
【发布时间】:2019-04-04 05:05:13
【问题描述】:

我正在尝试搜索与我的搜索模式匹配的文件。

static void ListBlobsInFolder() {
            var account = <MyStorageAccount>
            var blobClient = account.CreateCloudBlobClient();
            var containerName = "importcontainer";
            var folderName = "subfolder";
            var container = blobClient.GetContainerReference(containerName);
            var query = container.ListBlobs(prefix: folderName, useFlatBlobListing: true, blobListingDetails: BlobListingDetails.None);
            foreach(var item in query) {
                Console.WriteLine(item.Uri.Segments.Last());
            }
        }

这让我得到子文件夹中存在的文件列表。

有没有办法返回只匹配一个模式的文件。示例 我想检索其中包含“abc”的文件名。

这在 Azure 中可行吗?

【问题讨论】:

  • 您可以使用前缀进行过滤,但仅此而已

标签: c# azure search azure-blob-storage


【解决方案1】:

有没有办法返回只匹配一个模式的文件。例子 我想检索其中包含“abc”的文件名。

很遗憾,这是不可能的。 Azure Blob 存储中对服务器端搜索的支持有限。您唯一可以过滤的是 blob 前缀,即您可以指示 Azure 存储服务仅返回以某些字符开头的 blob 名称。

对于您的方案,您需要获取 blob 容器中所有 blob 的列表并在客户端进行过滤。

【讨论】:

  • 在客户端进行过滤。 -- 这正是我想要避免的。无论如何感谢您的确认。
  • Microsoft 是否已宣布计划支持更多选项来搜索 blob?我的意思是,这是一个简单的字符串,不是吗?当您可以支持startsWith 时,您也必须能够支持containsendsWith
  • 我的猜测是blob存储的内部结构。当容器中有数百万个 blob 时,执行 contains 搜索需要对所有 blob 进行迭代。根据其存储的内部结构,这可能是密集的。 startsWith 可让您查找存储层次结构中的特定点并迭代一小部分对象。我可以看到“如果你想要'包含',请将其添加为元数据或索引标签。或者使用某种形式的外部数据库,它指向 blob”。总体而言,Blob 以单一访问为导向。
猜你喜欢
  • 1970-01-01
  • 2020-01-02
  • 2015-04-16
  • 1970-01-01
  • 1970-01-01
  • 2016-08-14
  • 1970-01-01
  • 1970-01-01
  • 2018-03-16
相关资源
最近更新 更多