>  기사  >  데이터 베이스  >  여러 키워드가 있는 여러 열을 검색할 때 관련성을 우선시하는 검색 기능을 Laravel에서 어떻게 구현합니까?

여러 키워드가 있는 여러 열을 검색할 때 관련성을 우선시하는 검색 기능을 Laravel에서 어떻게 구현합니까?

Patricia Arquette
Patricia Arquette원래의
2024-11-05 16:00:03987검색

How to implement a search function in Laravel that prioritizes relevance when searching across multiple columns with multiple keywords?

Laravel: 관련순으로 정렬된 결과로 여러 열에서 여러 키워드를 사용하여 검색

Laravel에서 다음을 기반으로 데이터를 찾는 검색 기능을 구현합니다. 여러 열에 여러 키워드를 넣는 것은 어려울 수 있으며, 특히 관련성 순서가 관련된 경우에는 더욱 그렇습니다. 이 종합 가이드는 이 문제를 자세히 다루며 구조화된 접근 방식을 따르는 솔루션을 제공합니다.

데이터베이스 구조

데이터베이스 테이블에는 두 개의 열(meta_name 및 Meta_description)이 포함됩니다. 검색 키워드가 일치합니다.

검색 기준

검색에는 특정 기준이 있어 두 열 모두에 키워드가 있는지에 따라 결과의 우선순위가 결정됩니다. 세 개의 키워드가 모두 포함된 행에 가장 높은 우선순위가 부여되고, 처음 두 개의 키워드만 포함된 행, 마지막으로 첫 번째 키워드만 포함된 행이 따릅니다.

페이지 매김

검색 결과는 페이지 매김을 사용하여 동적으로 로드되며 사용자가 페이지 하단으로 스크롤하면 새 결과가 추가됩니다.

소스 코드

다음 코드 조각은 검색합니다. 원하는 순서로 검색 결과:

<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>

최종 쿼리

결과를 결합하려면 UnionAll 메서드를 사용합니다.

<code class="php">$posts = $all->unionAll($twoWords)->unionAll($oneWord)->get(); // check this first
# or
$posts = $all->unionAll($twoWords)->unionAll($oneWord)->skip($start)->take($this->rowperpage)->get();</code>

이 코드는 관련성을 우선시하여 지정된 순서로 결과를 가져옵니다. Skip() 및 take() 메소드는 페이지 매김에 사용됩니다. 여기서 $start는 이미 표시된 결과 수를 나타냅니다. 마지막으로 get() 메소드가 레코드를 검색합니다.

위 내용은 여러 키워드가 있는 여러 열을 검색할 때 관련성을 우선시하는 검색 기능을 Laravel에서 어떻게 구현합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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