Laravel: 관련성 기반 정렬을 사용하여 여러 열에 대해 여러 키워드 검색
Laravel에서 여러 열에 대해 여러 키워드를 고려하는 검색 구현 관련성을 유지하는 것은 어려울 수 있습니다. 이 문서에서는 지정된 열에서 키워드 발생 빈도에 따라 검색 결과가 정렬되는 문제를 다룹니다.
시나리오:
검색 창 세 개의 키워드를 입력해야 하며 검색 기준은 다음과 같습니다.
데이터베이스 쿼리:
원하는 결과를 얻으려면 데이터베이스 쿼리가 여러 OR 조건을 결합하고 whereNotIn 함수를 활용하여 이전 조건에서 이미 가져온 행을 제외해야 합니다.
<code class="php">$word1 = 'word1'; $word2 = 'word2'; $word3 = 'word3'; $all = DB::table('posts') ->where('meta_name', 'like', "%{$word1}%") ->where('meta_name', 'like', "%{$word2}%") ->where('meta_name', 'like', "%{$word3}%") ->orWhere(function($query) use ($word1, $word2, $word3) { $query->where('meta_description', 'like', "%{$word1}%") ->where('meta_description', 'like', "%{$word2}%") ->where('meta_description', 'like', "%{$word3}%"); }); $twoWords = DB::table('posts') ->where('meta_name', 'like', "%{$word1}%") ->where('meta_name', 'like', "%{$word2}%") ->orWhere(function($query) use ($word1, $word2) { $query->where('meta_description', 'like', "%{$word1}%") ->where('meta_description', 'like', "%{$word2}%"); }) ->whereNotIn('id', $all->pluck('id')); $oneWord = DB::table('posts') ->where('meta_name', 'like', "%{$word1}%") ->orWhere('meta_description', 'like', "%{$word1}%") ->whereNotIn('id', $all->pluck('id')) ->whereNotIn('id', $twoWords->pluck('id'));</code>
통합 및 순서 지정:
마지막으로 $all, $twoWords 및 $oneWord 결과는 Union 함수를 사용하여 병합되어 순서가 지정된 검색 결과를 얻습니다.
<code class="php">$posts = $all->union($twoWords)->union($oneWord)->get(); // check this first # or $posts = $all->union($twoWords)->union($oneWord)->skip($start)->take($this->rowperpage)->get();</code>
이 접근 방식을 사용하면 검색 결과가 순서대로 정렬됩니다. 지정된 기준에 따라 지정된 열의 세 가지 키워드가 모두 포함된 행부터 시작합니다.
위 내용은 Laravel에서 관련성 기반 순서를 사용하여 여러 열에서 여러 키워드를 검색하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!