validated()[$queryKey]; $currentPage = $request->validated()[$pageKey]; $perPage = 10; $searchQuery = $this->buildExactSearchQuery($searchTerm); $resultModels = SearchIndex::search($searchQuery) ->paginateRaw(perPage: $perPage, page: $currentPage); $resultModels->appends([ $queryKey => $searchTerm, $pageKey => $currentPage, 'query' => null, ]); return view('front.pages.search', compact('searchTerm', 'resultModels')); } /** * Set strict search term. * * @return string */ private function buildExactSearchQuery(string $searchTerm): string { $words = preg_split('/\s+/', trim($searchTerm), -1, PREG_SPLIT_NO_EMPTY); if (count($words) === 1) { return '"' . $words[0] . '"'; } $exactTerms = array_map(function($word) { return $word . '*'; }, $words); return '+' . implode(' +', $exactTerms); } }