groongaのテーブルは、テーブル作成時にパトリシア木オプションを指定すると、前方一致検索を行うことができます。また、追加のオプションを指定することにより、主キーの後方一致検索をも行うことができます。
table_createコマンドのflagsオプションにTABLE_PAT_KEYを指定することで、主キーによる前方一致検索ができるようになります。
実行例:
> table_create --name PatPrefix --flags TABLE_PAT_KEY --key_type ShortText
[[0,1317212719.34619,0.047490604],true]
> load --table PatPrefix
> [
> {"_key":"ひろゆき"},
> {"_key":"まろゆき"},
> {"_key":"ひろあき"}
> ]
[[0,1317212719.59456,1.001406593],3]
> select --table PatPrefix --query _key:@ひろ
[[0,1317212720.79648,0.00031203],[[[2],[["_id","UInt32"],["_key","ShortText"]],[3,"ひろあき"],[1,"ひろゆき"]]]]
table_createコマンドのflagsオプションにTABLE_PAT_KEYとKEY_WITH_SISを指定することで、主キーによる前方一致検索・後方一致検索の両方が可能となります。
KEY_WITH_SISフラグを付与すると、データを追加する際に後方一致用のレコードも追加されてしまいます。そのため、単純に検索すると、元のレコードに加えて自動的に追加されたレコードまでヒットしてしまいます。元のレコードのみ検索するために、一工夫必要になります。
例えば、元のレコードと自動的に追加されたレコードとの区別をつけるために、元のレコードであることを示すoriginalカラムを追加して、検索時にはoriginalカラムが true も検索条件に加えます。
実行例:
> table_create --name PatSuffix --flags TABLE_PAT_KEY|KEY_WITH_SIS --key_type ShortText
[[0,1317212720.99778,0.0531648179999999],true]
> column_create --table PatSuffix --name original --type Bool
[[0,1317212721.25163,0.099479727],true]
> load --table PatSuffix
> [
> {"_key":"ひろゆき","original":true},
> {"_key":"まろゆき","original":true},
> {"_key":"ひろあき","original":true}
> ]
[[0,1317212721.55167,1.001449341],3]
> select --table PatSuffix --query _key:@ゆき
[[0,1317212722.75369,0.000313623],[[[4],[["_id","UInt32"],["_key","ShortText"],["original","Bool"]],[1,"ひろゆき",true],[5,"まろゆき",true],[3,"ゆき",false],[2,"ろゆき",false]]]]
> select --table PatSuffix --query "_key:@ゆき original:true"
[[0,1317212722.95502,0.00032577],[[[2],[["_id","UInt32"],["_key","ShortText"],["original","Bool"]],[1,"ひろゆき",true],[5,"まろゆき",true]]]]