7.15.18. query_parallel_or

バージョン 11.0.1 で追加.

7.15.18.1. 概要

query_parallel_orquery と似ていますが、 query_parallel_or は複数の OR 条件を並列に処理します。

7.15.18.2. 構文

query_parallel_or は2つ以上の引数が必要です。 match_columns と1つ以上の query_string です。

options 引数は省略可能です。

query(match_columns, query_string0, query_string1, ..., query_stringN)
query(match_columns, query_string0, query_string1, ..., query_stringN, options)

少なくとも1つ query_string を指定しなければいけません。

options には以下のキーを指定します。すべてのキー・値のペアは省略可能です。:

{
  "expander": query_expander,
  "default_mode": default_mode,
  "default_operator": default_operator,
  "flags": flags
}

7.15.18.3. 使い方

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

サンプルスキーマ:

実行例:

table_create Documents TABLE_NO_KEY
# [[0, 1337566253.89858, 0.000355720520019531], true]
column_create Documents content COLUMN_SCALAR Text
# [[0, 1337566253.89858, 0.000355720520019531], true]
table_create Terms TABLE_PAT_KEY ShortText --default_tokenizer TokenBigram  --normalizer NormalizerAuto
# [[0, 1337566253.89858, 0.000355720520019531], true]
column_create Terms documents_content_index COLUMN_INDEX|WITH_POSITION Documents content
# [[0, 1337566253.89858, 0.000355720520019531], true]
table_create Users TABLE_NO_KEY
# [[0, 1337566253.89858, 0.000355720520019531], true]
column_create Users name COLUMN_SCALAR ShortText
# [[0, 1337566253.89858, 0.000355720520019531], true]
column_create Users memo COLUMN_SCALAR ShortText
# [[0, 1337566253.89858, 0.000355720520019531], true]
table_create Lexicon TABLE_HASH_KEY ShortText \
  --default_tokenizer 'TokenNgram("unify_alphabet", false)' \
  --normalizer NormalizerNFKC130
# [[0, 1337566253.89858, 0.000355720520019531], true]
column_create Lexicon users_name COLUMN_INDEX|WITH_POSITION Users name
# [[0, 1337566253.89858, 0.000355720520019531], true]
column_create Lexicon users_memo COLUMN_INDEX|WITH_POSITION Users memo
# [[0, 1337566253.89858, 0.000355720520019531], true]

サンプルデータ:

実行例:

load --table Users
[
{"name": "Alice", "memo": "Groonga user"},
{"name": "Alisa", "memo": "Mroonga user"},
{"name": "Bob",   "memo": "Rroonga user"},
{"name": "Tom",   "memo": "Nroonga user"},
{"name": "Tobby", "memo": "Groonga and Mroonga user. Mroonga is ..."}
]
# [[0, 1337566253.89858, 0.000355720520019531], 5]

以下は query_parallel_or 関数で並列に複数の全文検索を実行する例です。

実行例:

select Users \
  --output_columns name,memo,_score \
  --filter 'query_parallel_or("name * 10 || memo", "alice", "Groonga")'
# [
#   [
#     0,
#     1337566253.89858,
#     0.000355720520019531
#   ],
#   [
#     [
#       [
#         2
#       ],
#       [
#         [
#           "name",
#           "ShortText"
#         ],
#         [
#           "memo",
#           "ShortText"
#         ],
#         [
#           "_score",
#           "Int32"
#         ]
#       ],
#       [
#         "Alice",
#         "Groonga user",
#         11
#       ],
#       [
#         "Tobby",
#         "Groonga and Mroonga user. Mroonga is ...",
#         1
#       ]
#     ]
#   ]
# ]

この select コマンドは以下の全文検索を実行しなければいけません。

  • name から "alice" を全文検索

  • memo から "alice" を全文検索

  • name から "Groonga" を全文検索

  • memo から "Groonga" を全文検索

さらに、これらのすべての結果セットは OR で結合する必要があります。

query 関数はこれらを順番に実行します。 query_parallel_or 関数はこれらを並列に実行します。どちらの結果セットも同じになります。

7.15.18.4. 引数

7.15.18.4.1. 必須引数

必須引数は二つあります。 match_columnsquery_string です。

7.15.18.4.1.1. match_columns

query_string パラメーターの値で全文検索するときのデフォルトの検索対象カラムを指定します。このパラメーターは selectmatch_columns パラメーターと同じ役割です。

検索対象カラムとクエリー文字列の各ペアは並列に処理されます。たとえば、 query_parallel_or("C1 || C2 || C3", "Q1", "Q2") には次のペアがあります。

  • C1 @ "Q1"

  • C2 @ "Q1"

  • C3 @ "Q1"

  • C1 @ "Q2"

  • C2 @ "Q2"

  • C3 @ "Q2"

各ペアは並列に処理されます。並列度はシステムによります。デフォルトの最大スレッド数は CPUスレッド数 / 3 です。

7.15.18.4.1.2. query_string

クエリー構文 で検索条件を指定します。このパラメーターは select コマンドの query パラメーターと同じ役割です。

select コマンドの query については match_columns を参照してください。

並列に全文検索するために複数の query_string を指定できます。どのように並列化されるかは match_columns を参照してください。

7.15.18.4.2. 省略可能引数

いくつか省略可能な引数があります。

7.15.18.4.2.1. query_expander

詳細は query_expander を見てください。

7.15.18.4.2.2. default_mode

詳細は default_mode を見てください。

7.15.18.4.2.3. default_operator

詳細は default_operator を見てください。

7.15.18.4.2.4. flags

詳細は flags を見てください。

7.15.18.5. 戻り値

この関数は対象レコードがマッチしたかどうかを真偽値で返します。

この関数はセレクターとしても動きます。つまり、効率的に実行できるということです。

7.15.18.6. 参考