提问者:小点点

Azure blob存储-findBlobsByTags总是失败并出现错误错误在字符位置1处或附近解析查询:意外


我正在使用Azure Blob存储。在持久化blob时,我已经持久化了索引标记。当我通过Microsoft Azure存储资源管理器下载blob时,我能够看到索引标记。以编程方式,我正在尝试过滤标签(使用azure-Storage age-blob版本12.15.0)

我正在使用此api从DB获取详细信息-findBlosByTags

这是我正在尝试的代码

    FindBlobsOptions findByTags = new FindBlobsOptions(searchExpression));
    findByTags.setMaxResultsPerPage(100);
    PagedIterable<TaggedBlobItem> blobsByTags = blobContainerClient.findBlobsByTags(findByTags, Duration.ofSeconds(30), Context.NONE);

我尝试了以下查询

 1.   String searchExpression = "where=@container = 'container-name' AND \"field\" = \'value\'";
 2. String searchExpression = "where=field=value";
 3. String searchExpression = "where=\"field\" =\'value\'";
     String escapeJava = StringEscapeUtils.escapeJava(searchExpression);
 4. String searchExpression = "&where=\"trackingId\"=\'TA00965650\'";

我得到了这个例外。

[请求处理失败;嵌套异常com.azure.storage. blob.model.BlobStorageException:状态码400,"

InvalidQueryParameterValue在字符位置1处或附近解析查询时出错:意外'1'Request estId: 78043a6d-901e-00de-0797-510acf000000时间:2022-04-16T13:42:00.7475672Z其中="field"='value'此查询参数值无效。"]根本原因com.azure.storage.blob.model.BlobStorageException:状态码400,"

InvalidQueryParameterValue在字符位置1处或附近解析查询时出错:意外的'1'Request estId: 78043a6d-901e-00de-0797-510acf000000时间:2022-04-16T13:42:00.7475672Z其中="trackingId"='TA00965650'此查询参数值无效。"at sun.reect.NativeConstructorAccessorImpl.newInstance0(本机方法)at sun.reect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)at sun.reect.ConstrucatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)at java.lang.restructor.Constructor.newInstance(Constructor.java:423)atcom.azure.core.http.rest

从异常日志来看,我传递给findBlobsByTags方法的查询在解析中存在问题。请让我知道我做错了什么。如果需要做一些转义/编码


共2个答案

匿名用户

如注释中所述,请从搜索表达式中删除where=。文档似乎不正确。您可能需要在此处创建一个问题:https://github.com/Azure/azure-sdk-for-java/issues以便可以更正留档。

你可以在这里看到工作代码:https://github.com/Azure/azure-sdk-for-java/blob/azure-storage-blob_12.16.0/sdk/storage/azure-storage-blob/src/test/java/com/azure/storage/blob/ContainerAPITest.groovy.

匿名用户

我也遇到了类似的问题。我更新了如下查询,它可以正常工作。

BlobServiceClient blobServiceClient = getBlobServiceClient();

PagedIterable<TaggedBlobItem> findBlobsByTags = blobServiceClient.findBlobsByTags("\"Company\"='ABC'");

for(TaggedBlobItem taggedBlobItem : findBlobsByTags) {
    System.out.println("Find Blob, ContainerName - " + taggedBlobItem.getContainerName()+", Name - "+taggedBlobItem.getName());
}