`SELECT ... WHERE match(key, '^prefix...')`
should use index similarly to
`SELECT ... WHERE key LIKE 'prefix%'`
const FunctionTree & func,
    ContextPtr context,
    RPNElement & out,
    size_t & out_key_column_num)
{
    const auto & left_arg = func.getArgumentAt(0);
    out_key_column_num = 0;
    std::vector<MergeTreeSetIndex::KeyTuplePositionMapping> indexes_mapping;
    DataTypes data_types;
    auto get_key_tuple_position_mapping = [&](const Tree & node, size_t tuple_index)
    {
        MergeTreeSetIndex::KeyTuplePositionMapping index_mapping;
        index_mapping.tuple_index = tuple_index;
        DataTypePtr data_type;
        if (isKeyPossiblyWrappedByMonotonicFunctions(
                node, context, index_mapping.key_index, data_type, index_mapping.functions))
        {
            indexes_mapping.push_back(index_mapping);
            data_types.push_back(data_type);
            if (out_key_column_num < index_mapping.key_index)
                out_key_column_num = index_mapping.key_index;
        }
    };
    size_t left_args_count = 1;
    if (left_arg.isFunction())
    {
        
        
        auto left_arg_tuple = left_arg.asFunction();
        if (left_arg_tuple.getFunctionName() == "tuple")