I think I read that question a few times in the forum, so I thought I would post what I think is the solution. It seems to work for me. This is inspired by the code for the addGroupBy function in events-calendar-pro/lib/tribe-events-recurrence-meta.class.php.
// Show only first instance of recurring events in search results
add_filter( 'posts_groupby', 'my_posts_groupby', 10, 2);
function my_posts_groupby ( $group_by, $query ) {
if (is_admin() || !is_search()) return $group_by;
global $wpdb;
$group_by = " IF( {$wpdb->posts}.post_parent = 0, {$wpdb->posts}.ID, {$wpdb->posts}.post_parent )";
return $group_by;
}