私が担当しているITproのページの一つに,検索ページがある。以前紹介したことがあるが,ITproではサイト内検索エンジンの一つとしてGoogle検索アプライアンス(以下,GSA)を利用している。各ページの右上の検索窓から検索した場合や,詳細検索ページからの検索が,それに当たる。私が検索ページの担当になって1年余りたち,これまで,そしてこの2008年7月のリニューアルに向けていくつか改善を行ってきた。その作業の中で,GSAの良い点や悪い点,工夫が必要な点が見えてきた。
検索の高速性が最大の魅力
最初に,GSAの良い点から挙げておこう。私が感じたのは,大きく三つ。(1)検索が高速,(2)簡単な設定でとりあえず導入できる,(3)検索対象の設定の自由度が高い---である。
その中で最大の魅力と思っているのが,(1)の「検索が高速」であることだ。これまで,何らかの障害が発生したとき以外は,検索キーワードを投げてから結果が得られるまでに,“待たされる”ことはほとんどなかった。しかもGSAは,ITproのコンテンツ管理用のサーバーとは別の専用サーバーで動作しているので,どんなに検索処理が多くなってもコンテンツ管理サーバーの負荷が増えることもない。
二つ目の良い点が,「簡単な設定でとりあえず導入できる」ことだ。サイトを検索できるようにするには,(1)サイト内を巡回するための入り口のページ(URL)を設定する,(2)検索対象(GSAでは「コレクション」と呼ぶ)を設定する,(3)検索および検索結果のページを用意する,の三つだけでよい。
検索に必要な情報は,入り口のURLからGSAが勝手にサイト内のリンクをたどって取得していってくれる(GSAでは,これを「クロール」と呼ぶ)ので,特別な連携の仕組みはなくても導入できる。サイト全体を一通りクロールし終われば,サイト全体を検索できるようになる。検索インデックスをどうするかといった点を考えなくてよいことも,導入をやりやすくしている。
三つ目の「検索対象の設定の自由度が高い」は,検索対象とするページのグループ(コレクション)をURLによるパターンにより指定でき,その自由度が高いことを指している。URLは階層の途中までを指定したり,URL中に含まれる文字列で指定したりできる。URLパターンの指定に正規表現も可能なほか,除外条件も指定できるので,かなり複雑な指定が可能である。
コレクションは複数用意できるので,ITproでは,ITpro全体のほか,ニュース,解説などといったコレクションを用意することで,記事ジャンルを絞った検索ができるようにしている。
いつ検索結果に反映されるかわからない
逆にGSAの悪い点は,新着記事がいつ検索結果に反映されるかわからないことだ。ITproでは,ニュースなどの記事を随時掲載している。掲載した記事は,速やかに検索対象の記事に加えたいところだが,これがなかなか検索対象にならないのだ。
困ったことにGSAは,特定のURLからクロールするようには指示できるが,どのような周期でクロールするか,クロールした結果をいつ検索用のインデックスに反映するかといった点を設定することができない。その上,どのようにクロールしているかや,クロールした結果を検索インデックスに反映するタイミングなどの情報も公表されていないようで,GSAのステータス情報から類推するしかないのだ。
私がこれまでに調べた感触では,多くの記事が掲載後24時間程度で検索インデックスに含まれているらしい。だが,すべての記事が含まれているわけではなく,かといって24時間かからずに検索対象になる記事もそれなりにあるので,もう一つ動作がつかみきれずにいる。
記事じゃないところでヒットする
掲載した記事が,「いつ検索結果に反映されるかわからない」点は,現在解決策を見つけられていない課題なので,悪い点として書いた。それ以外にもGSAを利用していて困っている点がある。(1)記事以外の部分で検索結果にヒットしてしまう,(2)検索結果を新着順に表示できない,(3)検索結果を表示する際に,記事タイトルが途中で切れてしまうことがある---の大きく三つだ。
まず(1)の「記事以外の部分で検索結果にヒットしてしまう」とは,記事の右側や下側に表示される,最新ニュースや関連記事の一覧や広告欄などの情報が検索結果としてヒットしてしまうケースである。ページ構成を記事本体のみにして他の要素を排除すれば,このような問題は起きないが,それでは読者の利便性が損なわれたり,無料で情報を提供するといったことができなくなってしまう。だが,読者が本当に探したい記事は,記事部分に検索キーワードが含まれる記事のはずだ。
このような場合のために,GSAには専用のタグを用意している。ITproでは昨年秋,専用タグを使って,基本的に記事以外の部分がGSAのインデックスに含まれないように設定した。
新着順に表示できない
次に(2)についてだが,GSAには検索結果の表示順として,GSA独自の重み付け順,新着順,掲載順によりソートする機能があるのだが,ITproで実際に試してみると新着順や掲載順では正しく表示できなかった。その原因は,ITproがWebページ(記事の場合)をリクエストがあった段階で動的に生成しているため,GSAが正しい掲載日時を取得できないためのようだった。
この問題に対しては,当初GSAでの対応をあきらめていた。その時点では,簡単な解決策をまだ見い出していなかったからである。その代わり昨年秋,コンテンツ管理システムの備える検索機能を利用したプレミアム検索を提供し,複雑な検索ではGSAを代替することにした。
しかし,検索機能が二本立てとなってしまうのは,ユーザーにとってはわかりにくい。プレミアム検索に絞ればよいと思う方もいるかもしれないが,こちらはGSAほど高速ではなく,サーバーに対する負荷が大きいので,現在のITproのアクセス規模では採用できないと判断している。なんとかGSAで対応したいと考えていた。
(3)は,検索結果を表示する際に,記事タイトル(通常はhtmlタイトルを表示する)が途中で切られてしまうもの。単に長いタイトルのときに,後ろが切られるなら大きな問題ではない。だが,記事によっては,『第1回...』となってみたり,ひどいときは『「...』となっていたものがあった。GSAではタイトルとともに,検索ワードがヒットした場所の周辺のテキスト(snippet)も表示されるので,全くわからないことにはならないのだが,あまり好ましくないことは確かだ。
さて,これら(2)ソート順と(3)記事タイトルが切られてしまう問題だが,最近になって回避方法を見つけることができた。対応方法とは,html内にmetaタグとして掲載日や記事タイトルなどの情報を埋め込み,metaタグの情報をもとに検索結果をソートしたり,タイトルを表示したりするというものだ。
この方法の良い点は,ITproサイト側,GSA側の変更が少なくて済むこと。ITpro側は動的に生成しているWebページにmetaタグの記述を追加するだけでよい。GSAには元々metaタグを読み込む機能があり,取得したmetaタグを利用したソートや表示の設定ができる。
難点としては,すべての記事をクロールし直す必要があることだ。ITproの場合,通常のクロール処理ではサイト全体をクロールするのに概ね1カ月かかるため,準備や検証に時間がかかる。しかし,時間がかかるからといって,避けていては改善できない。この7月に予定しているリニューアルに向けて現在,ソート順と記事タイトルの問題点を解決した検索ページを提供したいと準備を進めている。期待してほしい。