query->get('term'); if (!empty($term)) { $results = Food::boolSearch() ->join(Recipe::class) // Attempt to match exact phrase first. ->should('match_phrase', ['name' => $term]) // Attempt multi-match search on all relevant fields with search-as-you-type on name. ->should((new MultiMatchQueryBuilder()) ->fields(['name', 'name._2gram', 'name._3gram', 'detail', 'brand', 'source']) ->query($term) ->type('bool_prefix') ->analyzer('simple') ->fuzziness('AUTO')) // Attempt to match on any tags in the term. ->should((new TermsQueryBuilder()) ->terms('tags', explode(' ', $term))) // Get resulting models. ->execute() ->models(); } return response()->json($results->values()); } }