7.15.37. vector_find#

7.15.37.1. Summary#

Added in version 8.0.4.

It returns the first element that matches the given condition from the given vector. If no element is found, it returns null.

You can use not only equal condition but also less than condition, prefix equal condition and so on.

To enable this function, register functions/vector plugin by the following command:

plugin_register functions/vector

7.15.37.2. Syntax#

vector_find has two or three parameters:

vector_find(vector, value)
vector_find(vector, value, mode)

If you omit the third argument, each element in the vector is compared with value by equality comparison.

7.15.37.3. Usage#

You need to register functions/vector plugin at first:

Execution example:

plugin_register functions/vector
# [[0,1337566253.89858,0.000355720520019531],true]

Here is a schema definition and sample data.

Sample schema:

Execution example:

table_create  Memos TABLE_HASH_KEY ShortText
# [[0,1337566253.89858,0.000355720520019531],true]
column_create Memos tags COLUMN_VECTOR ShortText
# [[0,1337566253.89858,0.000355720520019531],true]

Sample data:

Execution example:

load --table Memos
[
{"_key": "Groonga is fast",          "tags": ["groonga"]},
{"_key": "Mroonga is fast",          "tags": ["mroonga", "groonga"]},
{"_key": "Groonga is very good!",    "tags": ["groonga"]},
{"_key": "Droonga is fast",          "tags": ["droonga", "groonga"]},
{"_key": "Groonga is a HTTP server", "tags": ["groonga", "http"]}
]
# [[0,1337566253.89858,0.000355720520019531],5]

Here is a simple usage of vector_find that searches an element in tags column and returns the first found element:

Execution example:

select \
  --table Memos \
  --output_columns 'tags, vector_find(tags, "mroonga")'
# [
#   [
#     0,
#     1337566253.89858,
#     0.000355720520019531
#   ],
#   [
#     [
#       [
#         5
#       ],
#       [
#         [
#           "tags",
#           "ShortText"
#         ],
#         [
#           "vector_find",
#           null
#         ]
#       ],
#       [
#         [
#           "groonga"
#         ],
#         null
#       ],
#       [
#         [
#           "mroonga",
#           "groonga"
#         ],
#         "mroonga"
#       ],
#       [
#         [
#           "groonga"
#         ],
#         null
#       ],
#       [
#         [
#           "droonga",
#           "groonga"
#         ],
#         null
#       ],
#       [
#         [
#           "groonga",
#           "http"
#         ],
#         null
#       ]
#     ]
#   ]
# ]

It returns "mroonga" when the tags column value includes "mroonga" element. It returns null otherwise.

You can customize how to compare with each value by the third argument. Here is a usage to use full text search to find an element:

Execution example:

select \
  --table Memos \
  --output_columns 'tags, vector_find(tags, "roonga", "@")'
# [
#   [
#     0,
#     1337566253.89858,
#     0.000355720520019531
#   ],
#   [
#     [
#       [
#         5
#       ],
#       [
#         [
#           "tags",
#           "ShortText"
#         ],
#         [
#           "vector_find",
#           null
#         ]
#       ],
#       [
#         [
#           "groonga"
#         ],
#         "groonga"
#       ],
#       [
#         [
#           "mroonga",
#           "groonga"
#         ],
#         "mroonga"
#       ],
#       [
#         [
#           "groonga"
#         ],
#         "groonga"
#       ],
#       [
#         [
#           "droonga",
#           "groonga"
#         ],
#         "droonga"
#       ],
#       [
#         [
#           "groonga",
#           "http"
#         ],
#         "groonga"
#       ]
#     ]
#   ]
# ]

It returns "groonga", "mroonga" or "droonga" when the tags column value includes one of them. The returned value is the first found element. For example, "droonga" is returned for ["droonga", "groonga"]. "groonga" isn’t returned because the first element "droonga" is found before the second element "groonga" is searched.

It returns null when tags column value doesn’t include them.

7.15.37.4. Parameters#

It requires two parameters.

There is an optional parameter.

7.15.37.4.1. Required parameters#

vector and value are required.

7.15.37.4.1.1. vector#

Specifies a vector value to be searched an element.

7.15.37.4.1.2. value#

Specifies a value to be compared.

7.15.37.4.2. Optional parameters#

mode is optional.

7.15.37.4.2.1. mode#

Specifies a mode that specifies how to compare each element with value.

See default_mode for available mode names. All mode names except "NEAR", "SIMILAR" and "SUFFIX" are supported.

The default mode is "EQUAL". Note that default_mode says the default mode is "MATCH" but the default mode of vector_find is "EQUAL".

7.15.37.5. Return value#

The matched element on match, null otherwise.