groonga/groonga — pull request #244 by naoa (2014-11-15 14:28:07+00:00)
Title: Add "GRN_TOKENIZER_TOKEN_FORCE_PREFIX"

現在、``grn_token_cursor``（旧``grn_token``)には、``force_prefix``というメンバーがいます。
https://github.com/groonga/groonga/blob/master/lib/grn_token_cursor.h#L50

Ngramトークナイザーで``GRN_TOKENIZER_TOKEN_UNMATURED``、すなわち、NgramのNに満たないトークン（たとえば、Bigramのときは1文字）だけが入力されたときは自動的に強制前方一致検索されるようになっています。
https://github.com/groonga/groonga/blob/master/lib/token_cursor.c#L240
https://github.com/groonga/groonga/blob/master/lib/ii.c#L5404

(1)このケース以外に自由にトークナイザープラグインから強制前方一致を設定できるようにトークナイザーのステータスに``GRN_TOKENIZER_TOKEN_FORCE_PREFIX``追加していただけないでしょうか？

(2)さらに、そのうえで、最初のトークンだけでなく、2個目以降のトークンも``ef |= EX_PREFIX``を設定するようにしていただけませんでしょうか？

これらを追加していただけると、以下のように静的な頻度情報に応じたVgramトークナイザーを構築することができます。（トライのCommon prefix searchがないと可変のNgramを実現することができません。）

https://github.com/naoa/groonga-tokenizer-yangram#variable-ngram

実際に実験してみて、ヒット件数が変わらずに、キー数、キーサイズを抑えつつ、TokenBigramよりも検索速度が向上できることを確認しています。

お手数ですが、ご検討のほどよろしくお願いします。