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

  • English

ナビゲーション

  • 索引
  • 次へ |
  • 前へ |
  • Groonga v11.0.0ドキュメント »
  • 7. リファレンスマニュアル »
  • 7.15. 関数 »
  • 7.15.16. prefix_rk_search

7.15.16. prefix_rk_search¶

7.15.16.1. 概要¶

prefix_rk_search は 前方一致RK検索 を使ってレコードを選択します。

前方一致RK検索を使うには TABLE_PAT_KEY テーブルを作る必要があります。

シーケンシャルスキャンでは prefix_rk_search を使うことはできません。これはセレクターのみのプロシージャです。

7.15.16.2. 構文¶

prefix_rk_search には2つ引数があります。 column と query です。

prefix_rk_search(column, query)

今のところ、 column は必ず _key にしなければいけません。

query は文字列です。

7.15.16.3. 使い方¶

使い方を示すために使うスキーマ定義とサンプルデータは以下の通りです。

実行例:

table_create Readings TABLE_PAT_KEY ShortText --normalizer NormalizerAuto
# [[0, 1337566253.89858, 0.000355720520019531], true]
load --table Readings
[
{"_key": "ニホン"},
{"_key": "ニッポン"},
{"_key": "ローマジ"}
]
# [[0, 1337566253.89858, 0.000355720520019531], 3]

以下は簡単な prefix_rk_search() 関数の使い方です。この使い方では ni で ニホン と ニッポン を検索しています。

実行例:

select Readings --filter 'prefix_rk_search(_key, "ni")'
# [
#   [
#     0,
#     1337566253.89858,
#     0.000355720520019531
#   ],
#   [
#     [
#       [
#         2
#       ],
#       [
#         [
#           "_id",
#           "UInt32"
#         ],
#         [
#           "_key",
#           "ShortText"
#         ]
#       ],
#       [
#         2,
#         "ニッポン"
#       ],
#       [
#         1,
#         "ニホン"
#       ]
#     ]
#   ]
# ]

sub_filter と組み合わせることで 補完 のような機能を実現することができます。

レコードが補完候補となるテーブルを作成します。各レコードには0個以上の読みがあります。読みは Readings テーブルに格納します。 Readings テーブルに Items.readings 用のインデックスカラムを定義することを忘れないでください。このインデックスカラムは sub_filter で必要になります。

実行例:

table_create Items TABLE_HASH_KEY ShortText
# [[0, 1337566253.89858, 0.000355720520019531], true]
column_create Items readings COLUMN_VECTOR Readings
# [[0, 1337566253.89858, 0.000355720520019531], true]
column_create Readings items_index COLUMN_INDEX Items readings
# [[0, 1337566253.89858, 0.000355720520019531], true]
load --table Items
[
{"_key": "日本",     "readings": ["ニホン", "ニッポン"]},
{"_key": "ローマ字", "readings": ["ローマジ"]},
{"_key": "漢字",     "readings": ["カンジ"]}
]
# [[0, 1337566253.89858, 0.000355720520019531], 3]

niho で Items テーブルの中にある 日本 レコードを見つけることができます。なぜなら、 niho で前方一致RK検索をすると ニホン という読みが見つかり、 ニホン という読みは 日本 レコードの読みの1つだからです。

実行例:

select Items \
 --filter 'sub_filter(readings, "prefix_rk_search(_key, \\"niho\\")")'
# [
#   [
#     0,
#     1337566253.89858,
#     0.000355720520019531
#   ],
#   [
#     [
#       [
#         1
#       ],
#       [
#         [
#           "_id",
#           "UInt32"
#         ],
#         [
#           "_key",
#           "ShortText"
#         ],
#         [
#           "readings",
#           "Readings"
#         ]
#       ],
#       [
#         1,
#         "日本",
#         [
#           "ニホン",
#           "ニッポン"
#         ]
#       ]
#     ]
#   ]
# ]

読みがない補完候補をサポートするために 前方一致検索演算子 も組み合わせる必要があります。

読みがない補完候補を1つ追加します。

実行例:

load --table Items
[
{"_key": "nihon", "readings": []}
]
# [[0, 1337566253.89858, 0.000355720520019531], 1]

読みがない補完候補をサポートするために 前方一致検索演算子 を組み合わせます。

実行例:

select Items \
 --filter 'sub_filter(readings, "prefix_rk_search(_key, \\"niho\\")") || _key @^ "niho"'
# [
#   [
#     0,
#     1337566253.89858,
#     0.000355720520019531
#   ],
#   [
#     [
#       [
#         2
#       ],
#       [
#         [
#           "_id",
#           "UInt32"
#         ],
#         [
#           "_key",
#           "ShortText"
#         ],
#         [
#           "readings",
#           "Readings"
#         ]
#       ],
#       [
#         1,
#         "日本",
#         [
#           "ニホン",
#           "ニッポン"
#         ]
#       ],
#       [
#         4,
#         "nihon",
#         []
#       ]
#     ]
#   ]
# ]

多くの場合、補完時は大文字小文字を無視して検索したいものです。その場合は、 --normalizer NormalizerAuto と label カラムを使います。

実行例:

table_create LooseItems TABLE_HASH_KEY ShortText --normalizer NormalizerAuto
# [[0, 1337566253.89858, 0.000355720520019531], true]
column_create LooseItems label COLUMN_SCALAR ShortText
# [[0, 1337566253.89858, 0.000355720520019531], true]
column_create LooseItems readings COLUMN_VECTOR Readings
# [[0, 1337566253.89858, 0.000355720520019531], true]
column_create Readings loose_items_index COLUMN_INDEX LooseItems readings
# [[0, 1337566253.89858, 0.000355720520019531], true]
load --table LooseItems
[
{"_key": "日本",     "label": "日本",     "readings": ["ニホン", "ニッポン"]},
{"_key": "ローマ字", "label": "ローマ字", "readings": ["ローマジ"]},
{"_key": "漢字",     "label": "漢字",     "readings": ["カンジ"]},
{"_key": "Nihon",    "label": "日本",     "readings": []}
]
# [[0, 1337566253.89858, 0.000355720520019531], 4]

表示するときは LooseItems.label を使います。

実行例:

select LooseItems \
 --filter 'sub_filter(readings, "prefix_rk_search(_key, \\"nIhO\\")") || _key @^ "nIhO"' \
 --output_columns '_key,label'
# [
#   [
#     0,
#     1337566253.89858,
#     0.000355720520019531
#   ],
#   [
#     [
#       [
#         2
#       ],
#       [
#         [
#           "_key",
#           "ShortText"
#         ],
#         [
#           "label",
#           "ShortText"
#         ]
#       ],
#       [
#         "日本",
#         "日本"
#       ],
#       [
#         "nihon",
#         "日本"
#       ]
#     ]
#   ]
# ]

7.15.16.4. 引数¶

必須引数は二つあります。 column と query です。

7.15.16.4.1. column¶

今のところ、常に _key を指定してください。

7.15.16.4.2. query¶

クエリー文字列をローマ字、カタカナ、ひらがなのどれかで指定します。

7.15.16.5. 戻り値¶

prefix_rk_search 関数はマッチしたレコードを返します。

7.15.16.6. 参考¶

  • 前方一致RK検索

  • sub_filter

目次

  • 7.15.16. prefix_rk_search
    • 7.15.16.1. 概要
    • 7.15.16.2. 構文
    • 7.15.16.3. 使い方
    • 7.15.16.4. 引数
      • 7.15.16.4.1. column
      • 7.15.16.4.2. query
    • 7.15.16.5. 戻り値
    • 7.15.16.6. 参考

前のトピックへ

7.15.15. number_classify

次のトピックへ

7.15.17. query

クイック検索

ナビゲーション

  • 索引
  • 次へ |
  • 前へ |
  • Groonga v11.0.0ドキュメント »
  • 7. リファレンスマニュアル »
  • 7.15. 関数 »
  • 7.15.16. prefix_rk_search
© Copyright 2009-2021, Brazil, Inc.