ポータルサイトブログポータルサイトによくある機能「ファセットナビゲーション」
ポータルサイトによくある機能シリーズ、第一回は「ファセットナビゲーション」です。
ファセットナビゲーションの例
「ファセットナビゲーション(Faceted Navigation)」という言葉は聞きなれないかもしれませんが、おそらくみなさんよく目にしています。
例として挙げると以下のようなものです。
このように、検索軸の絞り込み(フィルタ)リンクが集まったナビゲーションをファセットナビゲーションと呼びます。
「ファセット(Facet)」とは鉱石などの「カット面」という意味ですが、検索の「切り口(軸)」という意味で使われています。
すこし厳密には、例えば上図 ヤフオク! の場合、「カテゴリから探す」が切り口(検索軸)、その中のリンクが絞り込み(フィルタ)です。
ファセットナビゲーションの実現方法
絞り込みの種別(検索軸)があまり多くないサイトの場合は、データベースへカウント計算の処理をさせて表示するのが基本です。
しかし、検索軸が多い場合やデータ量が多いポータルサイト等の場合、検索軸ごとにカウントの計算をするとデータベースの種類によってはかなりの処理コストがかかります。
「リレーショナルデータベース」と呼ばれる MySQL や PostgreSQL などは、一度に大量の絞り込み結果を計算するのに向いていません。
そこで便利なのが NoSQL系データベース です。
(「NoSQL系データベース」とは、おおざっぱに言うと「データどうしの関連に縛られずデータを格納できるデータベース」といったものですが、詳しいことはまたの機会に)
比較的容易に導入できるNoSQL系データベースに MongoDB、 Elasticsearch、Apache Solr などがあり、これらはファセットナビゲーション用の機能を備えています。
リレーショナルデータベースの場合は、絞り込み項目の数だけデータベースに接続し、そのうえでカウント計算します。
対してNoSQL系データベースの場合、一度検索した結果をもとに件数を割り出せるため、高速で効率的です。
リレーショナルデータベースと合わせて、検索用として上記のようなNoSQL系データベースを併用すると、グッとナビゲーションの幅が広がるでしょう。
「結果件数」表示の是非
リンクテキストの近辺に絞り込み結果の件数を表示するサイトもありますが、データ件数が多いポータルサイトなどの場合、表示していないサイトも増えています。
例えば Amazon や 食べログ など、以前はファセットナビゲーションに件数を表示していましたが、最近は削除しています。
件数表示を採用しない理由として考えられるのは、ユーザーに対して「結果件数」があまり重要な情報ではないという判断、表示スペースの有効活用、件数表示処理を省いた高速化 などではないかと推測しています。
ただし、リンクをクリックした結果1件もヒットしなかった、というガッカリ体験を防止するため、必ず「ゼロ件かどうか」は示した方が良いでしょう。(リンクを張らないようにする等)
そうなると、システム側では必然的に件数を計算する必要があります。
モバイルでの問題
ファセットナビゲーションはリンクが大量になりがちです。
デスクトップでは画面が広く、マウスでピンポイントにクリックできるのであまり意識しませんが、スマホなどのモバイル端末になると大量のリンクはユーザーに苦痛を与えます。
また、レスポンシブサイトとなるとファセットナビゲーションをうまく機能させるのは非常に大変です。
それもあって大手ポータルサイトでレスポンシブにしているサイトは少ないです。
最も良い解決方法はリンクの数を最低限の数に絞ることです。
例えば「エリア検索」の場合、全国2,000近い市区町村を全て並べるより、まずは都道府県で絞り込めるようにします。
より進んだ方法として、市区町村以外に独自グループで分ける方法もあります。
例えば「銀座を探す人は、近くの有楽町や新橋にも興味があるだろう」という仮定で「銀座・新橋・有楽町カテゴリ」を作ったり、ユーザーが求めるものを作ることは非常に親切です。
インターフェイス側の解決方法としては、メニュー自体を検索したりできると良いでしょう。
メニュー付近に検索入力欄を用意し、大量のリンクのなかから文字で絞り込む機能です。
Googleの検索窓にもついている、候補を提案する「サジェスト」などの機能も有用です。
いずれにしても、ユーザーが最短・最小の操作で検索結果に辿りつけるよう工夫することが大切です。