Laravel/MySQL 애플리케이션에 대한 전체 텍스트 검색 및 부분 검색을 활성화하는 가벼운 패키지
composer require bkstar123/mysql-search
예를 들어, 데이터베이스에는 id, title, content, status, user_id, created_at, updated_at 열이있는 articles 테이블이 있습니다.
사용자가 title, content 열에 대해 용어/키워드를 검색 할 수 있도록합니다.
그렇게하려면 다음 단계 만 수행하십시오.
A) Article 모델에서 특성 Bkstar123MySqlSearchTraitsMySqlSearch 수입 및 사용합니다.
b) Article 모델에서 예를 들어 $mysqlSearchable 이라는 공개 정적 속성을 정의하십시오.
<?php
namespace App ;
use Illuminate Database Eloquent Model ;
use Bkstar123 MySqlSearch Traits MySqlSearch ;
class Article extends Model
{
use MySqlSearch;
public static $ mysqlSearchable = [ ' title ' , ' content ' ];
//...
}c) MySQL 전체 텍스트 검색 기능 (MyIasm, InnoDB 지원 - MySQL 5.6+ 스토리지 엔진 이후)을 사용하려면 다음과 같은 추가 작업을 수행해야합니다.
-> articles 테이블 용 전체 텍스트 색인 생성 :
php artisan mysql-search:init "AppArticle"
참고 : articles 테이블에서 전체 텍스트 색인을 제거하려면 :
php artisan mysql-search:reset "AppArticle"
d) 검색 쿼리
전체 텍스트 검색 (기본값) :
<?php
App Article:: search ( $ searchTerms , true , ' natural ' )
App Article:: search ( $ searchTerms ) // full-text search in natural language mode
App Article:: search ( $ searchTerms , true , ' boolean ' ) // Full-text search in boolean mode
App Article:: search ( $ searchTerms , true , ' query ' ) // Full-text search with query expansion
// Better to use with try...catch as follows
try {
$ articles = App Article:: search ( $ searchText )
-> paginate ( 10 )
-> appends ([
' search ' => $ searchText
]);
} catch ( Exception $ e ) {
$ articles = [];
} 기본적으로 기본 전체 텍스트 검색 모드는 자연어입니다. .env 파일에서 fullText_Search_Mode 변수를 사용 하여이 기본값을 변경할 수 있습니다. 가능한 값 : natural, boolean, query
법률 언어 및 부울 모드에 대한 자세한 내용은 https://www.w3resource.com/mysql/mysql-full-text-search-functions.php를 참조하십시오. 검색 결과에서 많은 노이즈를 생성한다는 사실 때문에 쿼리 확장 모드는 권장되지 않습니다.
전체 텍스트 인덱스의 가장 큰 문제는 정기적 인 인덱스와 잘 어울리지 않는다는 것입니다. 다른 일반 인덱스 사용과 함께 전체 텍스트 검색 쿼리를 수행하면 매우 비효율적 인 쿼리 (불량 성능)를 갖게됩니다. https://medium.com/@kirkbackus/using-full-text-index-for-innodb when-a-search-engine-is-not-feasible-d666830b4000을 참조하십시오
부분 검색 ( %$ Searchterms %와 같은 연산자 사용)
<?php
App Article:: search ( $ searchTerms , false ) // partial search with LIKE operator against a wildcard term e.g: %searchTerm%