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

4.8. パトリシア木による前方一致検索

groongaのテーブルは、テーブル作成時にパトリシア木オプションを指定すると、前方一致検索を行うことができます。また、追加のオプションを指定することにより、主キーの後方一致検索をも行うことができます。

4.8.1. 主キーによる前方一致検索

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,
        "ひろゆき"
      ]
    ]
  ]
]

4.8.2. 主キーによる後方一致検索

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

目次

前のトピックへ

4.7. match_columnsパラメータ

次のトピックへ

4.9. 全文検索の語彙表に対する追加情報

このページ