今日のお題:ドリルダウン(ファセット検索)
Groongaで学ぶ全検索12/18に参加した際のメモです。
https://groonga.doorkeeper.jp/events/35021
ドリルダウンとは
検索の補助に使う集計機能が全文検索の文脈でのドリルダウン
例)
ショッピングサイトで「TV」で検索すると10,000件の商品がヒットする
更にヒットした商品をカテゴリーなどで絞り込む機能などに利用できる。
家電(8,000件)
書籍(書籍1,000件) 1,000
XXX 100
YYY
.
.
.
-
クリックで絞り込める
(全文検索の場合にはキーワードを入れる必要がある) -
0件の時は出さないなどができるのでユーザーががっかりしない
→わかりやすいユーザーインターフェースを実現できる。
Groongaでのドリルダウンの仕組み
例えば下記のような商品一覧があるとき
Groongaでは列単位でデータを格納する事でドリルダウンを高速化している。
No | 名前 | 大カテゴリー | 中カテゴリ |
---|---|---|---|
1 | ブラビア | 家電 | コンピュータ |
2 | Groonga入門 | 書籍 | コンピュータ |
3 | ルル | 薬 | |
4 | 今日の料理 | 書籍 | 料理 |
例)
行単位でデータを格納した場合大カテゴリーが書籍の件数を調べるには
各商品毎にバラバラに格納されているため、ハードディスクの様々な場所にアクセスする必要があるが
列単位でデータを格納した場合には、大カテゴリーの件数をカウントすれば良いので連続したデータにアクセスできるため高速に検索できる。
A.行単位でデータを格納した場合
「ブラビア、家電、コンピュータ」「Groonga入門、書籍、コンピュータ」...
B.列単位でデータを格納した場合
大カテゴリー:「家電、書籍、薬、書籍」
中カテゴリ:「コンピュータ、コンピュータ、料理」
多段階のドリルダウン
例)
書籍
→コンピュータ
→料理
その他メモ
- GroongaはN個のドリルダウンが可能
- 平均、最大値、最小値、合計なども計算できる
- 対象が何件かを格納している結果セットはKey,Valueのハッシュテーブルで保持,valueはサイズが固定長のバッファなので分類などの情報も格納できる
- OLAP(online analytical processing)などオンラインの分析処理などが求められるので、今後は集計処理を速くすることも必要。