7.15.18. query_parallel_or

New in version 11.0.1.

7.15.18.1. Summary

query_parallel_or is similar to query but query_parallel_or processes query that has multiple OR conditions in parallel.

7.15.18.2. Syntax

query_parallel_or requires two or more parameters - match_columns and query_string s.

The options parameter is optional.

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

You must specify at least one query_string.

options uses the following format. All of key-value pairs are optional:

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

7.15.18.3. Usage

Here are a schema definition and sample data to show usage.

Sample schema:

Execution example:

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]

Sample data:

Execution example:

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]

Here is an example to execute full text searches in parallel by query_parallel_or function:

Execution example:

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

This select command needs to execute the following full text searches:

  • "alice" against name

  • "alice" against memo

  • "Groonga" against name

  • "Groonga" against memo

And all result sets of them are needed to be combined by OR.

query function executes them in a sequential order. query_parallel_or function executes them in parallel. Result sets of both of them are same.

7.15.18.4. Parameters

7.15.18.4.1. Required parameters

There are two required parameters, match_columns and query_string.

7.15.18.4.1.1. match_columns

Specifies the default target columns for full text search by query_string parameters. It is the same role as match_columns parameter in select.

Each pair of target column and query string is processed in parallel. For example, query_parallel_or("C1 || C2 || C3", "Q1", "Q2") has the following pairs:

  • C1 @ "Q1"

  • C2 @ "Q1"

  • C3 @ "Q1"

  • C1 @ "Q2"

  • C2 @ "Q2"

  • C3 @ "Q2"

Each pair is processed in parallel. Degree of parallelism is depends on your system. The default max number of threads is N_CPU_THREADS / 3.

7.15.18.4.1.2. query_string

Specifies the search condition in Query syntax. It is the same role as query parameter in select.

See match_columns about query parameter in select.

You can specify multiple query_string s to execute full text searches in parallel. See also match_columns how to parallelize.

7.15.18.4.2. Optional parameter

There are some optional parameters.

7.15.18.4.2.1. query_expander

See query_expander for details.

7.15.18.4.2.2. default_mode

See default_mode for details.

7.15.18.4.2.3. default_operator

See default_operator for details.

7.15.18.4.2.4. flags

See flags for details.

7.15.18.5. Return value

This function returns whether a record is matched or not as boolean.

This function is also worked as a selector. It means that this function can be executable effectively.

7.15.18.6. See also