执行Azure表存储不区分大小写的查询

时间:2013-12-20 01:33:45

标签: azure azure-storage azure-table-storage

这可能与这个问题How to perform a case-sensitive LINQ query in Azure?有些相关。但是,我正在使用Storage Client 3.0,而不是那个问题中的linq查询和TableStorageContext。

我有一个名为Account的表存储实体,它具有电子邮件地址的字符串属性。 email属性不是分区键或行键。

我想以不区分大小写的方式搜索具有匹配电子邮件地址的实体,以便搜索“bob@test.com”返回“Bob@Test.com”等。

我的代码看起来像这样:

TableQuery<Account> rangeQuery = new TableQuery<Account>().Where(
    TableQuery.CombineFilters(
        TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, "account"),
        TableOperators.And,
        TableQuery.GenerateFilterCondition("Email", QueryComparisons.Equal, email)));

var results = accountsTable.ExecuteQuery(rangeQuery).ToList();

有没有办法使用tableQuery类执行不区分大小写的查询,还是有另一种方法?我应该专注于数据整理并确保所有数据都被强制为一致的情况吗?

2 个答案:

答案 0 :(得分:8)

要回答有关执行不区分大小写搜索的问题,使用Windows Azure表存储无法执行此操作。

一种方法是你建议的方式,即进行数据整理并以小写或大写形式存储所有内容。

其他方法是在客户端下载数据,然后对客户端上获取的数据进行区分大小写搜索。第二种方法对于较小的数据集可能是可行的,但如果数据集要大得多则不可行。

答案 1 :(得分:4)

搜索不是分区+行键最左边部分的任何内容都会导致表扫描。

一种方法是在另一个表中存储大写或小写的电子邮件,以便无需进行表扫描即可搜索。

在你的例子中说,

Partition key = test.com 
Row key = bob 

可以很好地工作并为您提供许多查询选项。