Azure Searchとは(公式のメールより)
Azure Search のパブリック プレビュー開始
多くのアプリケーションでは、ユーザーとの主なインタラクションのパターンとして検索が使用されています。Azure Search とはサービスとしての検索を提供するソリューションで、開発者およびクラウドの構築者は、複雑なフル テキスト検索について心配することなく、またインフラストラクチャの導入、維持、管理を行うことなく、Web やモバイル アプリケーションに複雑な検索機能を埋め込むことができます。Azure Search を使うと、開発者はアプリケーションでデータ検索の威力を発揮し、検索インデックスの管理と調整に関連した複雑さを軽減し、慣れ親しんだインターフェイスおよび一貫したプラットフォームですぐに利用を開始できます。
Azure Search は専用のスループットとストレージを含む統合可能なユニットで提供されており、開発者は費用効果の高い方法で検索機能を簡単に立ち上げて拡張できます。データ量またはスループットの需要の変化に応じて、それらのニーズを満たすために拡張した後、コストを削減するためにまた縮小することもできます。
Azure Search は Azure プレビュー ポータルからご利用いただけます。パブリック プレビューの期間中、Azure Search はサービスが利用可能なすべてのリージョンで割引料金でご利用いただけます。
だそうです。まぁ一言で言えばSearch as a Service。検索エンジンのサービスです。ただAzure Searchがクロールしてくれるわけではなくて、Indexにアプリなどからドキュメントを放り込みます。
公式サイトはこちら
あと、今回のサンプルでも使う.NETなツールがNuGetに公開されているのですが、そちらを作った人のBlogなどを参考に。
サービスの作成と管理
なにわともあれ、まずはサービスを有効化しましょう。プレビューポータルからサービスを作成します。
プランやリソースグループ、サブスクリプション、ロケーションを選択します。まだ使えるRegionは少ないのですが東南アジアが使えるのでそちらにしました。(プレビュー時点は価格50%オフです。とりあえずフリーでいいでしょう)
※プランによる制限の違いはこちらを参考に→ Limits and constraints (Azure Search API)
しばらく待つと出来上がります。
Keysでは操作に必要なキーを管理できます。
クエリを実行するのにだけ利用できるキーはManage query keysから。
サービスのURLはPropertiesから参照できます。
またScaleではレプリカ数やパーティション数を調整してユニット数を変えることができます。
ちょっとパーティションの動きが怪しかったけどFreeプランだからかな?
今のところそんなに多くは管理できません。また作ったばかりなのでIndexやドキュメントのメトリクスは利用できないですね。
Indexの生成と検索
では実際にコードからIndexを生成したり、検索したりしてみたいと思います。
1からコード書こうと思いましたが、Fabric Controllerさんが素晴らしいコードを公開してたのでそのまま使うことにしました。
※今のところNuGetでRedDog.Searchを使うといろいろ捗るかと
まずはサンプルをゲットしましょう。
GitHubから以下の2つのソースを取得します。
RedDog.Search.Portalが今回利用するAzure Searchのフロント部分になるWebアプリです。で、中でRedDog.Searchを使ってるのですが、NuGetで取得できるアセンブリではちょっと足らないっぽいのでRedDog.Searchもソースからゲットすることにしました。(やり方が悪いのか何なのか)※まあPreviewだし
GetしたソースのRedGod.Search.Portalのソリューションを開いて、ソリューションにRedDog.Searchプロジェクトを追加します。その後REdDog.Search.PortalからNuGetのRedDog.Searchを削除して、先ほど追加したプロジェクトのほうを参照として追加します。
あと、Webアプリ内でApp_Dataのimportsフォルダを使うけどソースには含まれてないので追加しましょう。
最後にWeb.config内のAzure.Search.ServiceName と Azure.Search.ApiKey にそれぞれプレビューポータルで取得できるサービス名とキーを入力して保存します。ここまでで設定は完了です。あとは実行してみましょう。
それっぽいWebページが開くので、まずはIndexを作成しましょう。(Indexにドキュメントを放り込んでいきます。
Index名は小文字のみ他いろいろ制限あります。ストレージのコンテナ名と同じような規則かな。また名前いれるとそのIndexに含めるフィールドを追加・編集していきます。
対象フィールドが検索できるのか、データ取得できるのかなどのフラグありますのでそれぞれ良しなに。あと利用できる型やフィールド名にも制限ありますので注意ください。
できたら保存しましょう。エラーがあれば画面上部に詳細が出ると思います。
さて、容れ物としてのIndexができたので、ドキュメントを入れていきましょう。
このサンプルだとCSVからのImportしかないので、Importを選びます。
作ったフィールド名と順番が一致するヘッダ行を含んだCSVファイルをD&Dします。(なおデリミタは; ※Web.configで設定)
できたらSearchで検索してみましょう。いろいろクエリいじったりフィルタしたりしましょう。
全件
日本語複数ワード
とかとか。
ドキュメント入れるとポータル上でもどれぐらいかわかるようになります。
最低限、使える感じですね。
まぁ細かいコードとかはFabric ControllerさんとかMSDNを参考にどうぞ。
- Managing Microsoft Azure Search with the RedDog Search Portal
- Azure Search Technical Overview (Preview) (MSDN)
まとめ
ちょっとクセが強いかもしれませんがLuceneとか触ってた人なら取り組みやすいかもしれません。ちなみにアルゴリズムはよくわからないし、カスタムの類似語辞書使えないし。英語のWordBreakはできてそうなんですけど。Index作るときにアルゴリズム選べたり調整できると嬉しいですねぇ。
Previewなのでこれからに期待です。