Ein leichtes Paket, mit dem die Suche nach Volltext und teilweise Suche nach Laravel/MySQL-Anwendungen aktiviert werden kann
composer require bkstar123/mysql-search
Beispielsweise verfügt Ihre Datenbank über eine articles mit id, title, content, status, user_id, created_at, updated_at Spalten.
Sie möchten Benutzern ermöglichen, nach einem Term/Schlüsselwort gegen title, content zu suchen.
Um dies zu tun, machen Sie einfach die folgenden Schritte aus:
a Bkstar123MySqlSearchTraitsMySqlSearch Im Article importieren und verwenden
b) Definieren Sie im Article beispielsweise eine öffentliche statische Eigenschaft, die als $mysqlSearchable definieren:
<?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) Wenn Sie die MySQL -Full -Text -Suchfunktion verwenden möchten (unterstützt von Myiasm, InnoDB - Da MySQL 5.6+ Speichermotoren), müssen die folgenden zusätzlichen Arbeiten erfüllt werden:
-> FullText Index für articles erstellen:
php artisan mysql-search:init "AppArticle"
HINWEIS : Um den FullText -Index aus articles Tabelle zu entfernen:
php artisan mysql-search:reset "AppArticle"
d) Suchanfrage
Volltextsuche (Standard) :
<?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 = [];
} Standardmäßig ist der Standard-Volltext-Suchmodus eine natürliche Sprache. Sie können diesen Standardwert ändern, indem Sie fullText_search_mode variable in .env -Datei, mögliche Werte verwenden: natural, boolean, query
In https://www.w3resource.com/mysql/mysql-full-text-search-functions.php finden Sie Details zum Natual Language & Boolean-Modus. Der Abfrageerweiterungsmodus wird aufgrund der Tatsache nicht empfohlen, dass im Suchergebnis viel Lärm erzeugt wird.
Das größte Problem bei Volltextindizes ist, dass Thay nicht gut mit regulären Indizes spielt. Wenn Sie in Kombination mit der Verwendung anderer normaler Indizes eine Suchabfrage mit Volltext durchführen, werden Sie eine sehr ineffiziente Abfrage (schlechte Leistung) haben. Weitere Informationen finden Sie unter https://medium.com/@kirkbackus/using-full-text-index-for-innodb-when-a-search-engine-is-not-----D666830b4000
Partielle Suche (mit dem Bediener wie %$ searchterms %)
<?php
App Article:: search ( $ searchTerms , false ) // partial search with LIKE operator against a wildcard term e.g: %searchTerm%