suggest向けDDL解説
==================

suggest機能で必要となるスキーマを説明する。なお、このドキュメントはsuggest機能完成とともにdocsディレクトリ内に移動される。

1. 概要

 suggestデータベースには、学習過程でのみ必要になるテーブルと、
 学習時およびサジェスト時に必要になるテーブルがあります。
 前者を作業用テーブルと呼び、後者を学習結果テーブルと呼びます。

2. 学習結果テーブル

 学習結果テーブルは二つのファクトテーブルと二つの語彙テーブルから構成されます。

2.1. 学習結果ファクトテーブル

item: suggest候補として提示する個々の文字列を格納するテーブルです。

 以下のカラムを用意しています。

 _key: itemテーブルの主キーは、サジェスト対象文字列そのものとなります。
 kana: 対象文字列の読み仮名を格納します。必須ではありませんが、セットされていればローマ字入力途中の文字列に対しても補完候補を提示可能となります。
 freq: ユーザクエリにおいて入力された回数を記録します。
 last: ユーザクエリに最後に入力された時刻を記録します。
 freq2: ユーザクエリにおいてサブミットされた回数を記録します。
 boost: 当該文字列の露出を制御します。正値を指定すれば露出が頻繁になり、-1を指定すれば、露出されません。
 buzz: 入力回数の差分を記録します。
 co: 共起する他の文字列を参照するための索引です。

pair: item間の共起関係を管理するテーブルです。

 以下のカラムを用意しています。

 _kay: preおよびpostのIDを結合した数値が主キーとなります。
 pre: 事前に出現するアイティムです。
 post: 事後に出現するアイティムです。
 freq0: completeイベントにおける共起頻度を記録します。
 freq1: correctイベントにおける共起頻度を記録します。
 freq2: suggestイベントにおける共起頻度を記録します。

2.2. 学習結果語彙テーブル

 bigram: itemの主キーによって全文検索を行うための語彙表です。
 kana: itemのkanaカラムの入力補完を行うための語彙表です。

3. 作業用テーブル

 作業用テーブルにはeventとsequenceの2テーブルがあります。

event: ユーザの個々のクエリイベントに対応します。レコードの追加のみが行われます。
       適宜dropして再作成することが望ましいです。

 type: submitの有無を記録します。
 time: イベントが発生した時刻を記録します。
 item: ユーザが入力した文字列を記録します。
 sequence: ユーザの識別子(cookie, ipアドレス等)を記録します。

sequence: 同一ユーザの一連の操作を記録します。レコードの追加のみが行われます。
          適宜dropして再作成することが望ましいです。

 events: 当該ユーザの操作履歴を記録します。
