How to rewrite wordpress search to work on specific category

You can use add_rewrite_rule():

add_action( 'init', function(){
    // Non-paged requests. E.g. example.com/categoryname/search/keyword/
    add_rewrite_rule( '^categoryname/search/([^/]+)/?$',
        'index.php?category=categoryname&s=$matches[1]',
        'top' );

    // For paged requests. E.g. example.com/categoryname/search/keyword/page/2/
    add_rewrite_rule( '^categoryname/search/([^/]+)/page/(\d+)/?$',
        'index.php?category=categoryname&s=$matches[1]&paged=$matches[2]',
        'top' );
} );

Be sure to flush the permalinks — simply visit the Permalink Settings page.