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フルテキスト検索機能(myasm、Innodbによってサポートされている - mysql 5.6+ストレージエンジン以来)を使用する場合、以下の追加作品は満たされます。
- > articlesのフルテキストインデックスを作成するテーブル:
php artisan mysql-search:init "AppArticle"
注: articlesからFullTextインデックスを削除するには:
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を参照してください。クエリ拡張モードは、検索結果に多くのノイズを作成するという事実のため、推奨されません。
フルテキストインデックスの最大の問題は、Thayが通常のインデックスでうまく再生されないことです。他の通常のインデックスを使用することと組み合わせてフルテキスト検索クエリを実行すると、非常に非効率的なクエリ(悪いパフォーマンス)があります。 https://medium.com/@kirkbackus/using-full-text-index-for-innodb-when-when-a-search-not-not-fible-fible-fible-fible-not-not-not-not-not-not-when-when-when-when-when-when-when-when-when-when-when-when-when
部分検索(%$ searchterms%のようなオペレーターを使用)
<?php
App Article:: search ( $ searchTerms , false ) // partial search with LIKE operator against a wildcard term e.g: %searchTerm%