Un package léger pour permettre la recherche en texte intégral et la recherche partielle des applications Laravel / MySQL
composer require bkstar123/mysql-search
Par exemple, votre base de données a une table articles avec id, title, content, status, user_id, created_at, updated_at .
Vous souhaitez permettre aux utilisateurs de rechercher un terme / mot-clé contre les colonnes title, content .
Pour ce faire, faites simplement les étapes suivantes:
a) Dans le modèle Article , importation et utilisation du trait Bkstar123MySqlSearchTraitsMySqlSearch
b) Dans le modèle Article , définissez une propriété statique publique nommée $mysqlSearchable , par exemple:
<?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) Si vous souhaitez utiliser la fonction de recherche de texte intégral MySQL (prise en charge par Myiasm, InnodB - puisque les moteurs de stockage MySQL 5.6+), les travaux supplémentaires ci-dessous doivent être remplis:
-> Créer un index complet pour articles Tableau:
php artisan mysql-search:init "AppArticle"
Remarque : Pour supprimer l'index complet du tableau articles :
php artisan mysql-search:reset "AppArticle"
d) Recherche de recherche
Recherche de texte intégral (par défaut) :
<?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 = [];
} Par défaut, le mode de recherche en texte intégral par défaut est un langage naturel. Vous pouvez modifier cette valeur par défaut en utilisant la variable FullText_Search_Mode dans le fichier .env , Valeurs possibles: natural, boolean, query
Reportez-vous à https://www.w3resource.com/mysql/mysql-full-text-search-functions.php pour plus de détails sur le langage natural et le mode booléen. Le mode d'extension de requête n'est pas recommandé en raison du fait qu'il crée beaucoup de bruit dans le résultat de la recherche.
Le plus gros problème avec les index de texte complet est que ils ne jouent pas bien avec les index réguliers. Si vous effectuez une requête de recherche en texte complet en combinaison avec l'utilisation d'autres index normaux, vous allez avoir une requête très inefficace (mauvaises performances). Reportez-vous à https://medium.com/@kirkbackus/using-full-text-index-for-innodb-when-a-search-engine-is-not-feasible-d666830b4000
Recherche partielle (en utilisant l'opérateur comme% $ searchterms%)
<?php
App Article:: search ( $ searchTerms , false ) // partial search with LIKE operator against a wildcard term e.g: %searchTerm%