How to filter search results by post type?

By all rights it should work, here’s the same thing applied to my own site:

tomjn.com/?s=talk&post_type=tomjn_talks vs tomjn.com/?s=talk . Something else is the problem

Specifically, if you replace the main query with a query_posts call or a WP_Query, that query won’t take into account parameters passed via the URL unless explicitly passed through manually.

Instead, use the pre_get_posts filter to modify the main query, rather than creating a new query to replace it.This ensures any additional queries passed via the URL will also work, and reduces time spent querying the database significantly for a nice performance boost.

Additionally, if you already use pre_get_posts, setting the post_type will override the URL parameter, so you need to check for its existence