# groonga - オープンソースのカラムストア機能付き全文検索エンジン

- English page

### ナビゲーション

- 索引
- 次へ |
- 前へ |
- groonga v2.0.4ドキュメント »
- 5. サジェスト »

# 5.5. 提案

このセクションでは以下の補完機能について説明します。:

- どのように動作するか
- 使い方
- 学習方法

## 5.5.1. どのように動作するか

提案機能は提案する語を計算するために1種類の検索を使います。:

> 1. 学習したデータを共起検索。

### 5.5.1.1. 共起検索

共起検索はユーザの入力と関連する語を検索します。共起検索ではユーザの実行したときの検索クエリを使います。このデータはクエリログやアクセスログなどから学習します。

例えば、ユーザが以下のように検索を実行したとします。:

クエリ
search engine
web search realtime

groongaは以下のような提案ペアを作成します。

入力 | 提案される語
--- | ---
search | search engine
engine | search engine
web | web search realtime
search | web search realtime
realtime | web search realtime

これらのペアは以下の手順で作成します。:

> 1. ユーザの入力をTokenDelimitトークナイザーでトークナイズします。TokenDelimitは空白をトークンの区切りに使います。（例えば、"search engine"は"search"トークンと"engine"トークンの2つのトークンにトークナイズされます。）
> 2. 各トークンについて、トークンと元のクエリからなるペアを作成する。

ユーザが"search"と入力したとき、共起検索は"search engine"と"web search raltime"を返します。これは、"search"が2つの「入力」カラムに含まれていて、対応するそれぞれの「提案される語」カラムの値が"search engine"と"web search realtime"だからです。

## 5.5.2. 使い方

groongaは提案機能を使うために suggest コマンドを用意しています。 --type suggest オプションを使うと提案機能を利用できます。

例えば、"search"と入力した時の提案結果を取得するコマンドは以下の通りです。:

実行例:

    suggest --table item_query --column kana --types suggest --frequency_threshold 1 --query search
    # [
    #   [
    #     0,
    #     1337566253.89858,
    #     0.000355720520019531
    #   ],
    #   {
    #     "suggest": [
    #       [
    #         2
    #       ],
    #       [
    #         [
    #           "_key",
    #           "ShortText"
    #         ],
    #         [
    #           "_score",
    #           "Int32"
    #         ]
    #       ],
    #       [
    #         "search engine",
    #         1
    #       ],
    #       [
    #         "web search realtime",
    #         1
    #       ]
    #     ]
    #   }
    # ]

## 5.5.3. 学習方法

共起検索は学習データを使います。学習データはクエリログやアクセスログなどを元に作成します。学習データを作成するには、タイムスタンプ付きの入力シーケンスと、タイムスタンプ付きの検索実行時の入力内容が必要です。

例えば、ユーザが"engine"で検索したいとします。ユーザが以下のようなシーケンスで検索クエリを入力したとします。:

> 1. 2011-08-10T13:33:25+09:00: search engine （検索実行）
> 2. 2011-08-10T13:33:28+09:00: web search realtime （検索実行）

以下のコマンドで上記の検索実行結果から学習します。:

    load --table event_query --each 'suggest_preparer(_id, type, item, sequence, time, pair_query)'
    [
    {"sequence": "1", "time": 1312950803.86057, "item": "search engine", "type": "submit"},
    {"sequence": "1", "time": 1312950808.86057, "item": "web search realtime", "type": "submit"}
    ]

### ナビゲーション

- 索引
- 次へ |
- 前へ |
- groonga v2.0.4ドキュメント »
- 5. サジェスト »