輕巧的軟件包,以啟用全文搜索和部分搜索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/mysql-full-text-search-functions.php。不建議使用查詢擴展模式,因為它在搜索結果中會產生很多噪音。
全文本索引的最大問題是,Thay與常規索引的效果不佳。如果您與使用其他普通索引結合使用全文搜索查詢,則您將具有非常低效率的查詢(性能不佳)。請參閱https://medium.com/@kirkbackus/using-full-text-index-for-innodb-when-a-a-search-enchine-ischine-is-rot-s-not-not-fasible-d666830b4000
部分搜索(使用類似於%$ $ searchterms%的操作員)
<?php
App Article:: search ( $ searchTerms , false ) // partial search with LIKE operator against a wildcard term e.g: %searchTerm%