groongaのテーブルは、テーブル作成時にパトリシア木オプションを指定すると、前方一致検索を行うことができます。また、追加のオプションを指定することにより、主キーの後方一致検索をも行うことができます。
table_createコマンドのflagsオプションにTABLE_PAT_KEYを指定することで、主キーによる前方一致検索ができるようになります。
実行例
> table_create --name PatPrefix --flags TABLE_PAT_KEY --key_type ShortText
[[0,1308820996.96716,0.044653865],true]
> load --table PatPrefix
> [
> {"_key":"ひろゆき"},
> {"_key":"まろゆき"},
> {"_key":"ひろあき"}
> ]
[[0,1308820997.21348,1.005917803],3]
> select --table PatPrefix --query _key:@ひろ
[[0,1308820998.42103,0.000401963],[[[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,1308820998.62409,0.056108533],true]
> column_create --table PatSuffix --name original --type Bool
[[0,1308820998.8819,0.038650376],true]
> load --table PatSuffix
> [
> {"_key":"ひろゆき","original":true},
> {"_key":"まろゆき","original":true},
> {"_key":"ひろあき","original":true}
> ]
[[0,1308820999.12224,1.0055318],3]
> select --table PatSuffix --query _key:@ゆき
[[0,1308821000.32928,0.000440379],[[[4],[["_id","UInt32"],["_key","ShortText"],["original","Bool"]],[1,"ひろゆき",true],[5,"まろゆき",true],[3,"ゆき",false],[2,"ろゆき",false]]]]
> select --table PatSuffix --query "_key:@ゆき original:true"
[[0,1308821000.5325,0.000412256],[[[2],[["_id","UInt32"],["_key","ShortText"],["original","Bool"]],[1,"ひろゆき",true],[5,"まろゆき",true]]]]