Azure Searchで検索結果のハイライト機能を使う

samatsu 8/29/2015 3370 N/A Azure Search

Azure Searchでは検索にマッチした検索インデックス中の単語をハイライトする機能があります。これを使うのはとっても簡単で、検索時にどのインデックス列に対してハイライトを行うのかを指定するだけです。

下記のサンプルコードでは SearchParamtersのHightlightFields でどの検索インデックスフィードに対して検索結果のハイライトを行うかを指定しています。 HightlihgPreTag, HightlightPostTag でハイライトに使うタグを指定しています。デフォルトでは<em>タグが使用されます。

SearchParameters sp = new SearchParameters() { SearchMode = SearchMode.All, Top = 10 };
sp.HighlightFields = new[] { "summary" };
sp.HighlightPreTag = "<b>";
sp.HighlightPostTag = "</b>";

実際に検索を行うと SearchResultクラスのHighlightsプロパティにハイライトされた検索結果のテキストが格納されます。検索に使用したキーワードは複数の検索インデックスカラムにマッチするので、HightlightsプロパティはDictionary型(キーがインデックス名、値がハイライトされた文章の配列) です。インデックスの名前をキーに指定してハイライトされたテキストの一覧を取得できます。今回のサンプルコードの例では "summary" をキーにして検索にマッチしたハイライトされた文字列の一覧を取得できます。

上記サンプルで、 summary インデックスに検索キーワードがマッチしない場合は、 SearchResult.Highlightsプロパティには summary をキーとする要素は格納されないのでプログラムを記述する時にはキーが存在することを確認してからハイライトされたテキストを取得するようにしてください。

検索を行うサンプルについては、"Azure Search Serviceを使ってみた Part2 Azure Search をプログラムで使用する"を参照してください。SearchResultクラスに関してはMSDNを参照してください。

SearchResult<T> Class
https://msdn.microsoft.com/en-us/library/azure/dn947186.aspx