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

- English

# 7.3.57. `suggest`

注釈

サジェスト機能の仕様はまだ確定していません。仕様は変更される可能性があります。

## 7.3.57.1. 概要

suggest - 指定されたクエリーに対する補完・補正・提案候補を返す。

suggestコマンドは指定されたクエリーに対する補完・補正・提案候補を返します。

補完・補正・提案については はじめに を参照してください。

## 7.3.57.2. 構文

    suggest types
            table
            column
            query
            [sortby=-_score]
            [output_columns=_key,_score]
            [offset=0]
            [limit=10]
            [frequency_threshold=100]
            [conditional_probability_threshold=0.2]
            [prefix_search=auto]

## 7.3.57.3. 使い方

以下は補完用の学習データです。

実行例:

    load --table event_query --each 'suggest_preparer(_id, type, item, sequence, time, pair_query)'
    [
    {"sequence": "1", "time": 1312950803.86057, "item": "e"},
    {"sequence": "1", "time": 1312950803.96857, "item": "en"},
    {"sequence": "1", "time": 1312950804.26057, "item": "eng"},
    {"sequence": "1", "time": 1312950804.56057, "item": "engi"},
    {"sequence": "1", "time": 1312950804.76057, "item": "engin"},
    {"sequence": "1", "time": 1312950805.86057, "item": "engine", "type": "submit"}
    ]
    # [[0, 1337566253.89858, 0.000355720520019531], 6]

以下は補正用の学習データです。

実行例:

    load --table event_query --each 'suggest_preparer(_id, type, item, sequence, time, pair_query)'
    [
    {"sequence": "2", "time": 1312950803.86057, "item": "s"},
    {"sequence": "2", "time": 1312950803.96857, "item": "sa"},
    {"sequence": "2", "time": 1312950804.26057, "item": "sae"},
    {"sequence": "2", "time": 1312950804.56057, "item": "saer"},
    {"sequence": "2", "time": 1312950804.76057, "item": "saerc"},
    {"sequence": "2", "time": 1312950805.76057, "item": "saerch", "type": "submit"},
    {"sequence": "2", "time": 1312950809.76057, "item": "serch"},
    {"sequence": "2", "time": 1312950810.86057, "item": "search", "type": "submit"}
    ]
    # [[0, 1337566253.89858, 0.000355720520019531], 8]

以下は提案用の学習データです。

実行例:

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

以下は補完例です。

実行例:

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

以下は補正例です。

実行例:

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

以下は提案例です。

実行例:

    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
    #       ]
    #     ]
    #   }
    # ]

以下は補完・補正・提案を混ぜた例です。

実行例:

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

## 7.3.57.4. 引数

`types`

  suggestコマンドでどの種類の候補を返すかを指定します。

  指定できる種類は以下の通りです。

  > `complete`

  >   補完を実行します。

  > `correct`

  >   補正を実行します。

  > `suggest`

  >   提案を実行します。

  1つ以上の種類を指定できます。複数の種類を指定する場合は `|` で区切ります。以下が例です。:

  > 補正候補を返します:

  >     correct

  > 補正候補と提案候補を返します:

  >     correct|suggest

  > 補完候補と補正候補と提案候補を返します:

  >     complete|correct|suggest

`table`

  `item_${データセット名}` というフォーマットのテーブル名を指定します。例えば、以下のコマンドでデータセットを作成した場合はテーブル名として `item_query` を指定します:

      groonga-suggest-create-dataset /tmp/db-path query

`column`

  `table` で指定したテーブルにあるふりがな情報を含むカラムを指定します。ふりがなはカタカナで指定します。

`query`

  補完・補正・提案対象のクエリーを指定します。

`sortby`

  ソートキーを指定します。

  Default:
    `-_score`
`output_columns`

  出力するカラムを指定します。

  Default:
    `_key,_score`
`offset`

  返されるレコードのオフセットを指定します。

  Default:
    `0`
`limit`

  返されるレコード数を指定します。

  Default:
    `10`
`frequency_threshold`

  出現頻度に対する閾値を指定します。返されるレコードの `_score` 値は `frequency_threshold` 以上になります。

  Default:
    `100`

`conditional_probability_threshold`

> 条件付き確率に対する閾値を指定します。学習データに対して条件付き確率を使います。ここで使う条件付き確率は、入力した `query` と同じ入力があったときにクエリが検索された確率です。返されるレコードの条件付き確率は `conditional_probability_threshold` 以上になります。

> Default:
>   `0.2`

`prefix_search`

  補完時に前方一致検索を実行するかどうかを指定します。

  指定可能な値は以下の通りです。

  > `yes`

  >   常に前方一致検索を実行します。

  > `no`

  >   前方一致検索を実行しません。

  > `auto`

  >   他の検索でレコードが見つからない場合のみ前方一致検索を実行します。

  Default:
    `auto`
`similar_search`

  補正時に類似検索を実行するかどうかを指定します。

  指定可能な値は以下の通りです。

  > `yes`

  >   常に類似検索を実行します。

  > `no`

  >   類似検索を実行しません。

  > `auto`

  >   他の検索でレコードが見つからない場合のみ類似検索を実行します。

  Default:
    `auto`

## 7.3.57.5. 戻り値

返されるJSON形式は以下の通りです:

    {"type1": [["candidate1", score of candidate1],
               ["candidate2", score of candidate2],
               ...],
     "type2": [["candidate1", score of candidate1],
               ["candidate2", score of candidate2],
               ...],
     ...}

`type`

> `types` で指定した値。

`candidate`

> 補完・補正・提案候補。

`score of candidate`

> 対応する `candidate` のスコアです。スコアが高いほど補完・補正・提案候補として有力という意味になります。デフォルトでは候補は `score of candidate` の降順でソートされています。

## 7.3.57.6. 参考

- サジェスト
- groonga-suggest-create-dataset