LoginSignup
7
7

More than 1 year has passed since last update.

Azure Cognitive Search あれこれ

Posted at

やりたいこと

Azure Cognitive Search を触る機会があり、色々と分からない部分があったので、備忘録も兼ねてこの記事にまとめます。

具体的な操作方法やリソースの作成については別記事で投稿する予定です。

Azure Cognitive Search とは

公式ドキュメントより

Azure Cognitive Search (旧称 Azure Search) は、Web、モバイル、エンタープライズ アプリケーションに、プライベートで異種のコンテンツに対するリッチな検索エクスペリエンスを組み込むためのインフラストラクチャ、API、およびツールを開発者に提供するクラウド検索サービスです。

Azure Cognitive Search は、次のアプリケーション シナリオに適しています。

  • ユーザー定義のプライベートな検索インデックスへの異種コンテンツの統合。
  • インデックス作成とクエリワークロードを専用の検索サービスにオフロードします。
  • 関連性のチューニング、ファセット ナビゲーション、フィルター (地理空間検索)、同意語マッピング、オートコンプリートなど、検索に関連した機能を容易に実装。
    *Azure Blob Storage や Azure Cosmos DB に格納されている未区分の大きなテキスト ファイル、画像ファイル、またはアプリケーション ファイルを検索可能なチャンクに変換。 これは、外部処理を追加するコグニティブ スキルを使ってインデックスを作成するときに行われます。
  • 言語分析またはカスタム テキスト分析を追加。 英語以外のコンテンツがある場合、Azure Cognitive Search では、Lucene アナライザーと Microsoft の自然言語プロセッサの両方がサポートされます。 また、生コンテンツの特殊な処理 (分音記号のフィルター処理や、文字列内のパターンの認識と保持など) を実行するようにアナライザーを構成することもできます。

個人的には、Blob Storage や CosmosDB、 SharePoint の中身を検索できるのが便利そうと思う。

構成要素

これも公式ドキュメントより

検索サービス自体は、"インデックスの作成" と "クエリの実行" の 2 つが主なワークロードとなります。

  • インデックス作成は、取り込みのプロセスです。コンテンツを検索サービスに読み込んで検索可能にします。 内部では、受信テキストはトークンへと処理され、高速スキャンできるように逆インデックスに格納されます。 JSON ドキュメントをアップロードすることや、インデクサーを使用してデータを JSON にシリアル化することができます。
    コグニティブ スキルによる AI エンリッチメントは、インデックス付けの拡張機能です。 インデックスを付ける前に画像や言語の分析がコンテンツに必要な場合、AI エンリッチメントで、アプリケーション ファイルに埋め込まれたテキストの抽出、テキストの翻訳、さらにコンテンツを分析することによるテキスト以外のファイルのテキストと構造の推論もできます。
  • クエリが実行できるようになるのは、検索可能なテキストがインデックスに投入された後です。クライアント アプリが検索サービスにクエリ要求を送信して応答を処理します。 すべてのクエリは、ユーザーが制御する検索インデックスを介して実行されます。

検索サービス作成の流れ

Azure Cognitive Search を使って検索サービスを作成する流れは以下のようになる。

  1. データソースの準備
  2. インデックスの作成
  3. (Optional) フィールドマッピングの定義
  4. (Optional) スキルセットの登録
  5. (Optional) AI エンリッチメント
  6. インデクサーの作成

Azure Cognitive Search.png

以下、具体的に説明していく (ここでは概要のみ述べ、実際の定義や作成方法は別途記事にします)。

データソース

データソースとは、分析するデータ (文書ファイルなど) が保存されている場所 (ストレージアカウントなど) のこと。
これを定義した上で、インデクサーの作成時に指定してあげることでインデクサーがデータソース内のデータを読みにいく。

インデックス

インデックスは分析したデータを任意のフィールドに格納するための定義。インデックスに格納されることで検索可能になる。イメージとしては、データベースでいうテーブル定義に相当する。

[Optional] フィールドマッピング

インデックス作成時に使用される、型や出力名などをデータソースとマッピングするための定義。例えば、BLOB のメタデータからインデックスを作成する場合、メタデータ名は決まっているため、そのままインデックス定義に用いると分かりにくい。そういった場合に、フィールドマッピングして、分かりやすい名前にする。

[Optional] スキルセット

AI エンリッチメントを使う場合にインデクサーによって利用されるスキルの集合。スキルには、Microsoft が提供する組み込みスキルとユーザが定義するカスタムスキルがある。事前にスキルセットを定義しておき、そのスキルセット定義をインデクサー定義に記述する。

[Optional] エンリッチメント

全文検索できないようなコンテンツ (画像など) に対して機械学習モデルを適用すること。上記のスキルを使用することで、様々なエンリッチメントを適用することができる。データソース内のコンテンツが、非構造化テキストや画像などの場合に使用する。

組み込みスキルの一覧

インデクサー

インデクサーは、データソース内のコンテンツを抽出し事前に定義したインデックスにマッピングするクローラー。また、スキルや AI エンリッチメントもインデクサーによって呼び出される。

インデクサーの作成時に、定義したインデックスが作成され検索可能となる。
ちなみに、インデックスを変更した際には、インデックス定義を更新し、インデクサーの再作成もしくはリセット・再実行を行う必要がある。

以上です。

7
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
7