Windows Azure Table Storage は SubString Query をサポートしない

スキーマレスの Azure Table Storage では、文字列のContainsを使ったQueryはサポートしないようですね。(ただし StartsWith は CompareTo を応用することで使えるらしい…)

Linq to Azure Table では普通に書けるので、ダメもとで下記のコードを試してみたのですが、500 Error が返されるため、ちょっと調べてみました。

var query = from t in this.CreateQuery(EntitySetName)
            where (t.PartitionKey== ProductTable.PartitionKey) && t.Tags.Contains(tag)
            select t;

return query.ToList();

MSDNを漁ってみると、下記のような投稿が見つかりました。
LINQ SubString Query Using Azure Table Storage…

また下記のBlog記事を見るように提案されています。
Implementing a Simple Word Search Using Azure Table Storage

結局のところ、部分文字列の検索に関しては、自前でインデクス化したテーブルを別途作ってやるのが早道のようですね。確かに理にかなっています。

今回の(僕の)用途では、タグ付けされたアイテムを抽出するだけですから、アイテムの登録・更新時に、検索用テーブルにアイテムを登録してやることで実装したいと思います。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です