Search only one custom post type

The simplest way to only search a particular custom post type, and use its template for the results, is to set the action URL on the search form for the post type archive URL of your post type. Doing this means that WordPress will automatically limit results to that post type, and it will use the same template as your post type archive:

<form method="get" action="<?php echo esc_url( get_post_type_archive_link( 'restaurants' ) ); ?>">

The resulting URL will be:

https://example.com/restaurants/?s=search+term

Some reasons this might not work are:

  1. Your archive templates improperly use a custom WP_Query or query_posts(). Never use either of these to display the main list of posts in a WordPress template.
  2. You are using pre_get_posts to modify the main query in such a way that would interfere with the default behaviour.
  3. The “Filter & Search” that you’re using interferes with the default behaviour in some way. This plugin could be affected by 1 & 2 as well.

If you are married to using the Filter & Search plugin, but want to change the template in some way for your custom post type, then you’ll need to consult its documentation/support channels for the proper way to do that. It could be something completely. Just keep in mind point #3 above. Using query_posts in the way you have is almost certainly breaking the plugin.