轻巧的软件包,以启用全文搜索和部分搜索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%