>  기사  >  데이터 베이스  >  Laravel에서 관련성 기반 순서를 사용하여 여러 열에서 여러 키워드를 검색하는 방법은 무엇입니까?

Laravel에서 관련성 기반 순서를 사용하여 여러 열에서 여러 키워드를 검색하는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-11-06 14:09:02611검색

How to Search for Multiple Keywords Across Multiple Columns with Relevance-Based Ordering in Laravel?

Laravel: 관련성 기반 정렬을 사용하여 여러 열에 대해 여러 키워드 검색

Laravel에서 여러 열에 대해 여러 키워드를 고려하는 검색 구현 관련성을 유지하는 것은 어려울 수 있습니다. 이 문서에서는 지정된 열에서 키워드 발생 빈도에 따라 검색 결과가 정렬되는 문제를 다룹니다.

시나리오:

검색 창 세 개의 키워드를 입력해야 하며 검색 기준은 다음과 같습니다.

  1. 두 열(meta_name 및 Meta_description)의 세 키워드를 모두 포함하는 행이 먼저 옵니다.
  2. 처음 두 키워드만 포함하는 행 언급된 열은 두 번째입니다.
  3. 언급된 열의 첫 번째 키워드만 포함하는 행은 세 번째입니다.

데이터베이스 쿼리:

원하는 결과를 얻으려면 데이터베이스 쿼리가 여러 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.