検索トラフィック分析用のテレメトリ データを収集する
検索トラフィックの分析とは、ユーザーが開始したクリックストリーム イベントやキーボード入力など、Azure AI Search アプリケーションのユーザー操作に関するテレメトリ収集用のパターンのことです。 この情報を使用すると、クリックスルー率や結果がゼロとなるクエリ入力など、検索ソリューションの有効性を判断できます。
インストルメンテーションには、次の部分があります。
- テレメトリ クライアントを追加する
- 検索結果をユーザー アクションにマップする関連付け ID を含むように検索要求を変更する
- カスタム イベントを作成して Application Insights に送信し、視覚化ツールとレポート ツールを使用してイベント データを表示する
このパターンでは、Application Insights (Azure Monitor の 1 つの機能) 上で依存関係を取得して、ユーザー データを収集します。 それには、この記事で説明されているように、アプリケーション コードにインストルメンテーションを追加する必要があります。 最後に、データを分析するためのレポート メカニズムが必要になります。 Application Insights に接続する任意の視覚化ツールを使用できます。
Note
この記事で説明するパターンは、高度なシナリオと、クライアントに追加するコードによって生成されるクリックストリーム データを対象としています。 対照的に、サービス ログは設定が簡単で、検索用語を含むさまざまなメトリックを提供し、コードを必要とせずに Azure portal で実行できます。 すべてのシナリオでログを有効にすることをお勧めします。 詳細については、ログ データの収集と分析に関するページを参照してください。
前提条件
Azure AI 検索、任意のリージョン、Basic レベル以上。
検索結果の選択に関連付けるクリックストリーム イベントやその他のユーザー アクションを含む対話型の検索環境を提供するリッチ クライアント アプリケーション。
関連する検索データを識別する
検索トラフィックの分析に役立つメトリックを収集するには、検索アプリケーションのユーザーからのいくつかのシグナルをログに記録する必要があります。 これらのシグナルは、ユーザーが興味を持っていたり関連があると考えているコンテンツを示しています。 検索トラフィックの分析の場合、それには以下のものが含まれます。
ユーザーによって生成された検索イベント: ユーザーによって開始された検索クエリだけが対象となります。 ファセットの入力や内部情報の取得に使用されるような他の検索要求は、重要ではありません。 ユーザーが開始したイベントのみをインストルメント化して、結果にスキューやバイアスが含まれないようにしてください。
ユーザーによって生成されたクリックストリーム イベント: 検索結果ページでは、クリックストリーム イベントは一般に、ドキュメントが特定の検索クエリの適切な結果であることを意味します。
アプリケーション コードでは、これらのイベントを、特定のクエリから返された検索結果と関連付ける必要があります。 検索やクリックストリームのイベントを関連付け ID とリンクすることで、アプリケーションの検索機能がどれぐらい適切に実行されているかをより詳しく理解できるようになります。
検索トラフィックの分析を追加する
Azure AI 検索の場合、Azure portal には、カスタム ログ イベントに必要なテレメトリ クライアント、要求ヘッダー、プロパティを追加するための C# および JavaScript コード スニペットを含む Search Traffic Analytics ページが用意されています。
重要
検索トラフィック分析ポータル ページは現在古く、古いクライアント ライブラリを参照しています。 回避策は、azure-search-traffic-analytics GitHub リポジトリのコード スニペットを使用することです。 この記事には、GitHub リポジトリのコード スニペットが含まれています。
ステップ 1: Application Insights の設定
Application Insights にイベントを送信するオブジェクトを作成します。 インストルメンテーションは、ブラウザーで実行されるサーバー側アプリケーション コードまたはクライアント側コードに追加できます。ここでは、C# と JavaScript のバリアントとして表しています。 その他の言語については、「サポートされているプラットフォームとフレームワーク」を参照してください。
サーバー側のテレメトリは、アプリケーション層でメトリックをキャプチャします (たとえば、Azure 上の Web サービスまたは企業ネットワーク上のオンプレミス アプリとして実行されるアプリーション内)。 サーバー側のテレメトリでは、検索とクリックストリーム イベント、結果内のドキュメントの位置、およびクエリ情報がキャプチャされますが、データ コレクションのスコープは、そのレイヤーで入手可能なすべての情報となります。
クライアントには、クエリ入力の操作、ナビゲーションの追加、コンテキストの付加 (たとえば、クエリがホーム ページから開始されたか、製品ページから開始されたか) を行うコードがある場合があります。 お使いのソリューションにふさわしい場合は、テレメトリに追加の詳細が反映されるように、クライアント側のインストルメンテーションも選択できます。 この追加の詳細情報を収集する仕組みは、このパターンの範囲を超えていますが、そのような決定については、「Web ページ用 Application Insights」で確認できます。
この手順では、Application Insights への接続文字列を提供します。
Visual Studio プロジェクトの一部の種類に対して機能するショートカットは、以下の手順で反映されます。
Visual Studio でソリューションを開きます。
[プロジェクト] メニューで [接続済みサービス]>[追加]>[Azure Application Insights] を選択します。
[依存関係への接続] で、[Azure Application Insights ] を選択し、[次へ] を選択します。
Azure サブスクリプションと Application Insights リソースを選択し、[完了] を選択します。
この時点で、アプリケーションはアプリケーション監視用に設定されます。したがって、すべてのページ読み込みは既定のメトリックで追跡されるようになります。
このショートカットが機能しなかった場合は、「Application Insights のサーバー側テレメトリを有効にする」、または隣接するタブのコード スニペットを参照してください。
ステップ 2: インストルメンテーションを追加する
クライアント アプリケーションにインストルメンテーション コードを追加します。
クリックストリーム イベントと検索結果を関連付ける
検索要求をクリックに関連付けるには、これら 2 つの異なるイベントを関連付ける関連付け ID を保持している必要があります。 HTTP ヘッダーを使って検索 ID を要求すると、Azure AI Search から提供されます。
検索 ID があれば、Azure AI Search によって要求自体に対して出力されるメトリックと、Application Insights でログしているカスタム メトリックを、関連付けることができます。
var client = new SearchClient(new Uri("https://contoso.search.windows.net"), "hotels-sample-index", new DefaultAzureCredential());
// Generate a new correlation id for logs
string searchId = Guid.NewGuid().ToString();
string searchText = "*";
SearchResults<SearchDocument> searchResults;
// Set correlation id for search request
using (HttpPipeline.CreateClientRequestIdScope(clientRequestId: searchId))
{
searchResults = client.Search<SearchDocument>(searchText, options: new SearchOptions { IncludeTotalCount = true } );
}
ログ カスタム イベント
ユーザーによって検索要求が発行されるたびに、Application Insights のカスタム イベントに関する次のスキーマを使用して、検索要求を検索イベントとしてログに記録する必要があります。 ユーザーが生成する検索クエリだけをログに記録してください。
- SearchId: (GUID) 検索クエリの一意識別子 (検索応答に組み込まれる)
- SearchServiceName: (文字列) 検索サービス名
- IndexName: (文字列) クエリの実行対象となる検索サービス インデックス
- SearchText: (文字列) ユーザーによって入力された検索語句
- ResultCount: (整数) 返されたドキュメントの数 (検索応答に組み込まれる)
Note
検索クエリに $count=true
を追加して、ユーザーによって生成されたクエリの数を要求します。 詳細については、ドキュメントの検索 (REST) に関するページを参照してください。
// Create properties for telemetry
var properties = new Dictionary<string, string>
{
["searchId"] = searchId,
["serviceName"] = "<PUT YOUR SEARCH SERVICE NAME HERE, example: contoso-search>",
["indexName"] = "<PUT YOUR INDEX NAME HERE>",
["searchText"] = searchText,
["resultsCount"] = searchResults.TotalCount?.ToString()
};
カスタム イベントを Application Insights に送信する
Application Insights の custom events テーブルにもカスタム イベントを追加します。 詳しくは、「カスタムのイベントとメトリックのための Application Insights API」をご覧ください。
telemetryClient.TrackEvent("search", properties);
telemetryClient.Flush();
手順 3: ログを確認する
カスタム イベントを表示するには、Application Insights でサポートされている方法のいずれかを使用します。
次のステップ
Application Insights では詳しい情報が見つかります。また、さまざまなサービス レベルについて詳しくは、価格に関するページをご覧ください。
レポート作成の詳細について説明します。 「Power BI Desktop の概要」を参照してください。