検索のカスタマイズ
検索の実行や結果の取得について、次のようなカスタマイズが可能です。
- フラグ
- 成人向けコンテンツの除外
- 画像検索
- スペル候補
- 検索結果のページ分けや結果件数の制限
フラグ
検索オブジェクトにフラグを設定すると、検索クエリを細かくカスタマイズできます。表1は設定可能なフラグの一覧です。
SearchFlags | 説明 |
DisableHostCollapsing | このSearchRequestに対して、同じトップレベルURLから3件以上の結果が返る場合でも、結果の省略を行いません。すべての結果を漏れなく取得したい場合にはこの値を使用します。 |
DisableSpellCorrectForSpecialWords | クエリ演算子で使用される特別な単語をスペルチェック時に無視させる場合に使用します。 |
MarkQueryWords | このSearchRequestに対して返される検索結果の中で、検索語をUTF-8文字のペアで囲みます。通常この機能は、検索語を強調表示する目的で使用します。 |
None | このSearchRequestに対してフラグを適用しません。 |
ここでは例として、MarkQueryWords
フラグをもう少し詳しく見てみましょう。MarkQueryWords
は、検索結果の中で検索語を強調表示したいときに使用します。次のコードは、この機能を使って検索語を太字で表示する例です。
SearchRequest sRequest = new SearchRequest(); sRequest.Flags = SearchFlags.MarkQueryWords;
結果セットは図8のように変わります。
成人向けコンテンツの除外
SafeSearchOptionsオブジェクトは、検索結果で返されるコンテンツに懸念がある場合に使用できる機能で、成人向けの画像やテキストを検索結果から除外できます。
SafeSearchOptions.Moderate
では成人向けの画像を除外でき、SafeSearchOptions.Strict
では成人向けの画像とテキストの両方を除外できます。
SearchRequest sRequest = new SearchRequest(); sRequest.SafeSearch = SafeSearchOptions.Moderate;
画像検索
画像のみを検索することも可能です。SourceRequestでSourceType.Image
を使用すると、フルサイズとサムネールの画像について、サイズ、高さ、幅、URIなどの情報が返ります。次のコードは、SourceとResultFieldsを使用して画像を取得する例です。
SourceRequest[] sr = new SourceRequest[1]; sr[0].Source = LiveSearch.SourceType.Image; sr[0].ResultFields = ResultFieldMask.Description | ResultFieldMask.Image | ResultFieldMask.Title;
検索結果は図9のようになります。表2は使用可能なソースタイプの一覧です。
SourceType | 説明 |
Image | フルサイズとサムネールの画像について、サイズ、高さ、幅、URIなどの情報を返します。 |
InlineAnswers | 回答を結果として返します。InlineAnswersの種類には、Encarta、Finance、Weather、およびMovie ShowTimesがあります。このオプションは商的利用に限定されています。 |
News | オンラインニュースサービスから結果を返します。 |
Phonebook | オンラインの個人別電話帳および職業別電話帳の項目から結果を返します。 |
QueryLocation | 入力内容に応じた地域検索で得た結果の場所を返します。たとえば、"coffee 98052"と検索した場合、Titleに"coffee"、Descriptionに"98052"が返り、郵便番号98052の中心位置の緯度と経度が返ります。この機能は米国市場でのみ使用できます。 |
Spelling | スペル候補を返します。 |
Web | Webページを返します。 |
スペル候補
ユーザーが検索語のスペルを誤って入力することはよくあります。そこで、検索の実行前に、ユーザーが入力した検索語のスペルをチェックすると、システムのユーザビリティが向上します。次のコードは、SourceType.Spelling
を使用して、検索語が正しく入力されたかどうかを調べる例です。
SearchRequest sRequest = new SearchRequest(); SourceRequest[] sr = new SourceRequest[1]; sr[0].Source = LiveSearch.SourceType.Spelling; sr[0].ResultFields = ResultFieldMask.All; sRequest.Query = "vertual earth";
検索結果のページ分けや結果件数の制限
検索機能のユーザビリティを高めるには、取得する結果の総数を制限したり、検索結果をページ分けして表示するという方法も有効です。結果の総数は次のように取得できます。
SearchResponse resp = serv.Search(sRequest); int total = resp.Responses[0].Total;
検索で取得する結果件数を指定するには、Count
プロパティを設定します。
SourceRequest[] sr = new SourceRequest[1]; sr[0].Count = 10;
データをページ分けして表示する処理を実装するときには、どのページを表示するか(表示したいページの先頭のレコード番号)と、1ページに表示するレコード数がわかっていなくてはなりません。Live Search APIでは、Offset
というプロパティを使用して、結果として取得する先頭のレコード番号を指定できます。次のコードは、レコード番号5から5件の結果を取得する例です。
SourceRequest[] sr = new SourceRequest[1]; sr[0].Count = 5; sr[0].Offset = 5;
この記事では、基本的な検索機能だけを取り上げました。他にも、可能性は無限に広がっています。最後に、有益なヒントや詳細な情報が得られるサイトのリンクを紹介しておきます。