logo
  • 7.1. 実行ファイル
    • 7.1.1. grndb
    • 7.1.2. grnslap
    • 7.1.3. groonga 実行ファイル
    • 7.1.4. groonga-benchmark
    • 7.1.5. groonga-httpd
    • 7.1.6. Groonga HTTPサーバー
    • 7.1.7. groonga-suggest-create-dataset
    • 7.1.8. groonga-suggest-httpd
    • 7.1.9. groonga-suggest-learner
  • 7.2. 出力
  • 7.3. コマンド
    • 7.3.1. コマンドバージョン
    • 7.3.2. 出力形式
    • 7.3.3. プリティープリント
    • 7.3.4. リクエストID
    • 7.3.5. リクエストタイムアウト
    • 7.3.6. リターンコード
      • 7.3.6.3.1. -2: GRN_OPERATION_NOT_PERMITTED
      • 7.3.6.3.2. -3: GRN_NO_SUCH_FILE_OR_DIRECTORY
      • 7.3.6.3.3. -6: GRN_INPUT_OUTPUT_ERROR
      • 7.3.6.3.4. -13: GRN_NOT_ENOUGH_SPACE
      • 7.3.6.3.5. -22: GRN_INVALID_ARGUMENT
      • 7.3.6.3.6. -34: GRN_RESOURCE_DEADLOCK_AVOIDED
    • 7.3.7. cache_limit
    • 7.3.8. check
    • 7.3.9. clearlock
    • 7.3.10. column_copy
    • 7.3.11. column_create
    • 7.3.12. column_list
    • 7.3.13. column_remove
    • 7.3.14. column_rename
    • 7.3.15. config_delete
    • 7.3.16. config_get
    • 7.3.17. config_set
    • 7.3.18. database_unmap
    • 7.3.19. define_selector
    • 7.3.20. defrag
    • 7.3.21. delete
    • 7.3.22. dump
    • 7.3.23. index_column_diff
    • 7.3.24. io_flush
    • 7.3.25. load
    • 7.3.26. lock_acquire
    • 7.3.27. lock_clear
    • 7.3.28. lock_release
    • 7.3.29. log_level
    • 7.3.30. log_put
    • 7.3.31. log_reopen
    • 7.3.32. logical_count
    • 7.3.33. logical_parameters
    • 7.3.34. logical_range_filter
    • 7.3.35. logical_select
    • 7.3.36. logical_shard_list
    • 7.3.37. logical_table_remove
    • 7.3.38. normalize
    • 7.3.39. normalizer_list
    • 7.3.40. object_exist
    • 7.3.41. object_inspect
    • 7.3.42. object_list
    • 7.3.43. object_remove
    • 7.3.44. plugin_register
    • 7.3.45. plugin_unregister
    • 7.3.46. query_expand
    • 7.3.47. quit
    • 7.3.48. range_filter
    • 7.3.49. reference_acquire
    • 7.3.50. reference_release
    • 7.3.51. register
    • 7.3.52. reindex
    • 7.3.53. request_cancel
    • 7.3.54. ruby_eval
    • 7.3.55. schema
    • 7.3.56. select
    • 7.3.57. shutdown
    • 7.3.58. status
    • 7.3.59. suggest
    • 7.3.60. table_copy
    • 7.3.61. table_create
    • 7.3.62. table_list
    • 7.3.63. table_remove
    • 7.3.64. table_rename
    • 7.3.65. table_tokenize
    • 7.3.66. thread_dump
    • 7.3.67. thread_limit
    • 7.3.68. tokenize
    • 7.3.69. tokenizer_list
    • 7.3.70. truncate
  • 7.4. データ型
  • 7.5. テーブル
  • 7.6. カラム
    • 7.6.1. スカラーカラム
    • 7.6.2. ベクターカラム
    • 7.6.3. 擬似カラム
    • 7.6.4. インデックスカラム
  • 7.7. ノーマライザー
    • 7.7.2.1. NormalizerAuto
    • 7.7.2.2. NormalizerNFKC100
    • 7.7.2.3. NormalizerNFKC121
    • 7.7.2.4. NormalizerNFKC130
    • 7.7.2.5. NormalizerNFKC150
    • 7.7.2.6. NormalizerNFKC51
    • 7.7.2.7. NormalizerTable
  • 7.8. トークナイザー
    • 7.8.1. 概要
    • 7.8.2. TokenBigram
    • 7.8.3. TokenBigramIgnoreBlank
    • 7.8.4. TokenBigramIgnoreBlankSplitSymbol
    • 7.8.5. TokenBigramIgnoreBlankSplitSymbolAlpha
    • 7.8.6. TokenBigramIgnoreBlankSplitSymbolAlphaDigit
    • 7.8.7. TokenBigramSplitSymbol
    • 7.8.8. TokenBigramSplitSymbolAlpha
    • 7.8.9. TokenBigramSplitSymbolAlphaDigit
    • 7.8.10. TokenDelimit
    • 7.8.11. TokenDelimitNull
    • 7.8.12. TokenMecab
    • 7.8.13. TokenNgram
    • 7.8.14. TokenPattern
    • 7.8.15. TokenRegexp
    • 7.8.16. TokenTable
    • 7.8.17. TokenTrigram
    • 7.8.18. TokenUnigram
  • 7.9. トークンフィルター
    • 7.9.1. 概要
    • 7.9.2. TokenFilterNFKC100
    • 7.9.3. TokenFilterNFKC150
    • 7.9.4. TokenFilterStem
    • 7.9.5. TokenFilterStopWord
  • 7.10. クエリー展開オブジェクト一覧
    • 7.10.1. QueryExpanderTSV
  • 7.11. スコアラー
    • 7.11.3.1. scorer_tf_at_most
    • 7.11.3.2. scorer_tf_idf
  • 7.12. Cast
  • 7.13. grn_expr
    • 7.13.1. クエリー構文
    • 7.13.2. スクリプト構文
  • 7.14. 正規表現
  • 7.15. 関数
    • 7.15.1. between
    • 7.15.2. cast_loose
    • 7.15.3. edit_distance
    • 7.15.4. escalate
    • 7.15.5. fuzzy_search
    • 7.15.6. geo_distance
    • 7.15.7. geo_in_circle
    • 7.15.8. geo_in_rectangle
    • 7.15.9. highlight_full
    • 7.15.10. highlight_html
    • 7.15.11. html_untag
    • 7.15.12. in_records
    • 7.15.13. in_values
    • 7.15.14. math_abs
    • 7.15.15. now
    • 7.15.16. number_classify
    • 7.15.17. prefix_rk_search
    • 7.15.18. query
    • 7.15.19. query_parallel_or
    • 7.15.20. rand
    • 7.15.21. snippet
    • 7.15.22. snippet_html
    • 7.15.23. string_length
    • 7.15.24. string_slice
    • 7.15.25. string_substring
    • 7.15.26. sub_filter
    • 7.15.27. time_classify_day
    • 7.15.28. time_classify_day_of_week
    • 7.15.29. time_classify_hour
    • 7.15.30. time_classify_minute
    • 7.15.31. time_classify_month
    • 7.15.32. time_classify_second
    • 7.15.33. time_classify_week
    • 7.15.34. time_classify_year
    • 7.15.35. vector_find
    • 7.15.36. vector_new
    • 7.15.37. vector_size
    • 7.15.38. vector_slice
  • 7.16. ウィンドウ関数
    • 7.16.1. record_number
    • 7.16.2. window_count
    • 7.16.3. window_rank
    • 7.16.4. window_record_number
    • 7.16.5. window_sum
  • 7.17. 操作方法
    • 7.17.1. 位置情報検索
    • 7.17.2. 前方一致RK検索
  • 7.18. 設定
  • 7.19. エイリアス
  • 7.20. サジェスト
    • 7.20.1. はじめに
    • 7.20.2. 補完
    • 7.20.3. 補正
    • 7.20.4. 提案
  • 7.21. インデックス構築
  • 7.22. シャーディング
  • 7.23. ログ
  • 7.24. チューニング
  • 7.25. API
    • 7.25.1. 概要
    • 7.25.2. 全体設定
    • 7.25.3. Plugin
    • 7.25.4. grn_cache
    • 7.25.5. grn_column
    • 7.25.6. grn_command_version
    • 7.25.7. grn_content_type
    • 7.25.8. grn_ctx
    • 7.25.9. grn_db
    • 7.25.10. grn_encoding
    • 7.25.11. grn_expr
    • 7.25.12. grn_geo
    • 7.25.13. grn_hook
    • 7.25.14. grn_ii
    • 7.25.15. grn_index_cursor
    • 7.25.16. grn_info
    • 7.25.17. grn_inspect
    • 7.25.18. grn_match_escalation
    • 7.25.19. grn_obj
    • 7.25.20. grn_proc
    • 7.25.21. grn_search
    • 7.25.22. grn_table
    • 7.25.23. grn_table_cursor
    • 7.25.24. grn_thread_*
    • 7.25.25. grn_type
    • 7.25.26. grn_user_data
On this page
  • 7.15.17.1. 概要
  • 7.15.17.2. 構文
  • 7.15.17.3. 使い方
  • 7.15.17.4. 引数
    • 7.15.17.4.1. column
    • 7.15.17.4.2. query
  • 7.15.17.5. 戻り値
  • 7.15.17.6. 参考

7.15.17. prefix_rk_search¶

7.15.17.1. 概要¶

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

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

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

7.15.17.2. 構文¶

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

prefix_rk_search(column, query)

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

query は文字列です。

7.15.17.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.17.4. 引数¶

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

7.15.17.4.1. column¶

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

7.15.17.4.2. query¶

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

7.15.17.5. 戻り値¶

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

7.15.17.6. 参考¶

  • 前方一致RK検索

  • sub_filter

前へ

7.15.16. number_classify

次へ

7.15.18. query

© Copyright 2009-2023 Groonga Project.

Created using Sphinx 5.3.0.