Search function – problem with whole words

Exact means exactly that – the whole field must match, not just a word in the field.

To get whole words that are part of the field,
remove 'exact' => 1

Add this

if ($_POST['terms']) {
     $keyword = sanitize_text_field( $context['terms'] );
     $keyword =  '[[:<:]]' . $keyword . '[[:>:]]';
     $context['posts'] = Timber::get_posts(array(
         // other params here
         's' => $keyword,
         // etc

Suggestion: use the wp_rest_api instead of admin ajax.