Posted at

Groongaで学ぶ全文検索 2015-12-18

More than 3 years have passed since last update.


今日のお題:ドリルダウン(ファセット検索)

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)などオンラインの分析処理などが求められるので、今後は集計処理を速くすることも必要。