groongaのテーブルは、テーブル作成時にパトリシア木オプションを指定すると、前方一致検索を行うことができます。また、追加のオプションを指定することにより、主キーの後方一致検索をも行うことができます。
table_createコマンドのflagsオプションにTABLE_PAT_KEYを指定することで、主キーによる前方一致検索ができるようになります。
実行例:
> table_create --name PatPrefix --flags TABLE_PAT_KEY --key_type ShortText
[[0,1335519594.52747,0.000475168228149414],true]
> load --table PatPrefix
> [
> {"_key":"ひろゆき"},
> {"_key":"まろゆき"},
> {"_key":"ひろあき"}
> ]
[[0,1335519594.72892,1.00176382064819],3]
> select --table PatPrefix --query _key:@ひろ
[
[
0,
1335519595.93126,
0.00059962272644043
],
[
[
[
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,1335519596.13342,0.000287294387817383],true]
> column_create --table PatSuffix --name original --type Bool
[[0,1335519596.33446,0.000329494476318359],true]
> load --table PatSuffix
> [
> {"_key":"ひろゆき","original":true},
> {"_key":"まろゆき","original":true},
> {"_key":"ひろあき","original":true}
> ]
[[0,1335519596.53576,1.00176548957825],3]
> select --table PatSuffix --query _key:@ゆき
[
[
0,
1335519597.73837,
0.000630855560302734
],
[
[
[
4
],
[
[
"_id",
"UInt32"
],
[
"_key",
"ShortText"
],
[
"original",
"Bool"
]
],
[
1,
"ひろゆき",
true
],
[
5,
"まろゆき",
true
],
[
3,
"ゆき",
false
],
[
2,
"ろゆき",
false
]
]
]
]
> select --table PatSuffix --query "_key:@ゆき original:true"
[
[
0,
1335519597.94114,
0.000690460205078125
],
[
[
[
2
],
[
[
"_id",
"UInt32"
],
[
"_key",
"ShortText"
],
[
"original",
"Bool"
]
],
[
1,
"ひろゆき",
true
],
[
5,
"まろゆき",
true
]
]
]
]