[WIP] Week1 検索導線のアーキテクチャ
コンシューマ向けのサイトでは、検索導線のデキがコンバージョンに直結するので、最重要なアーキテクチャになります。しかし、業務システムにおいても、元来効率的な業務のためには、巨大な検索パネルを配置して、はい終わりではなく、業務フローにそった導線設計こそシステム化の本質だったりするわけです。
したがって本章は、業務システムの開発に携わる人こそ、しっかり学んで設計に活かして欲しいと考えています。
ドリルダウン
Context
- 分類可能なデータを検索させる。
- ユーザの興味軸がある程度分かっている。
Force
- いきなり検索パネルが表示されてもどう検索したらよいかわからない。
Solutions
大分類 -> 中分類 -> 小分類 のように辿らせる。
- 分類ごとに件数を表示し、該当のないものはリンクを貼らないようにする。
- 階層構造をなすので"パンくず"を併用して、サイト横へのリンクをつける。
件数を取得するのは全件走査の重いクエリになりがちなので、集計結果のキャッシュを検討する。(-> キャッシュのアーキテクチャにて) リアルタイムに件数が変わる場合は、検索エンジンのファセット検索を使うと同様の検索結果をレスポンス良く取得することが可能である。
Examples
- suumo.jp http://suumo.jp/ikkodate/tokyo/city/
フリーワード検索
Context
- ユーザの自由なキーワードで検索させる。
Solutions
件数が少ない(数万件程度)のデータであれば、データベースのLIKE検索でもなんとかなるが、それ以上になるとSolrやElasticSearch等の全文検索エンジンを使った方がよいです。
- 検索文字列を単語に分割するトークンアナライザを決める。基準はこんな感じ。
- できるだけ多く検索結果を出したい -> N-gram
- できるだけ正確に検索結果を出したい -> 形態素解析
それぞれのトークンアナライザで注意すべき点をあげておく。
N-gram
- Nの部分を具体的に決める必要がある。2-gram (バイグラム)の利用例が多いが、この場合1文字の検索クエリは検索結果0件になる。
- 会社名など1文字でもヒットさせる必要があるときは、1-gramを使う。
- 形態素解析に比べて多くヒットする。B to B to Cのサイトでは特に多くヒットさせるのが重要だったりするので、N-gramが使われることが多い。
形態素解析
- 形態素解析エンジンを選定する必要がある。Kuromojiの利用が多いか。
- 辞書のメンテナンスが命。特に流行の商品のECサイトを作るなど、固有名詞が多い場合は辞書を買うのも手である。
検索クエリのオプティマイズ
Context
- 表記のゆれがあっても、同じものとして検索させたい
- 慶応/慶應
Force
Solutions
検索キーワードを補正して、検索を実行する。
- シノニム検索ができるようなものもある。
- これも基本は本番のクエリとヒット件数を見ながら、正規化用辞書を作る戦略がよい。
ページネーション
Context
- 検索結果を1ページに表示すると視認性が下がる。
- 検索結果を一度に転送するとページのレンダリングが遅くなるのでそれを避けたい。
Solutions
- 最初のページや最後のページにリンクをつける
- 最後のページヘのリンクは、検索エンジンに負荷をかけることが多い。よほどのことがない限りやらない方がよい。
- 検索結果の総件数を表示する。
http://suumo.jp/ikkodate/tokyo/sa_other_01/pnz13.html
ページネーションに必要な要素は以下のとおり
- 1ページに表示する最大件数
- ページリンクをいくつ表示するか
重み付け検索(boost)
Context
- 全文検索させたいが、とあるフィールドにヒットしたらそちらを上位に表示する。
- 例えば飲食店のサイトの検索で店名にヒットしたら料理名にヒットするよりも上位に検索結果として表示したいなどである。
Solutions
カラムを分けてインデックスを作り、より上位に出したいカラムのブースト値を大きくする。
- ブースト値のチューニングは、本物のデータを入れてみないと設計不可能である。
- 最初はKKDで設定し、本番運用でCVRを見ながらパラメータをいじる、という戦略が効果的である。
検索結果のグルーピング
Context
- 検索した単位とは別に、ある塊でグルーピングした形で検索結果を見せる。
Solutions
検索エンジンのコラプス検索を使う。
http://shingakunet.com/shigoto-search/keito_bd010/category_bc120/shigoto_b1330/
- 検索結果をグルーピングするカラムを指定してコラプス検索する。
- ページネーションはグループの件数でおこなうので、その単位でLimit/Offsetを設定できる必要がある。
ジオ検索
Context
- ある決まった地図上の位置から近くにある物件や店舗を検索したい
Solutions
緯度・経度をインデクシングして円形検索(半径○メートル以内のもの)する。
- SolrやElasticSearchのジオ検索機能を使う。
- スマフォの画面は四角いので、矩形検索したいという要件もでやすい。
- 現在地から検索したい場合も、モダンブラウザでは緯度経度が一応取得できるので、特にデバイス気にせず機能使わせることが多い。
サジェスト / あいまい検索
Context
- カスタマの検索導線での離脱が多い。
- 分類やキーワードに厳密にマッチさせない方がCVRが高い場合がある。
Solutions
検索パネル
Conext
- 検索結果件数が多くなりがちで、絞り込みさせたい。
Solutions
検索条件をパネル表示し、絞り込み条件を入力させる。
- 検索結果
- 絞り込みが目的なので、OR検索となるような複数選択可能な項目はできる限り少なくする。
- [Bad] はじめから検索パネルを使わせるのは、カスタマを惑わせるので避けたほうがよい。ドリルダウンの導線を作るべきである。