Un paquete liviano para habilitar la búsqueda de texto completo y la búsqueda parcial de aplicaciones Laravel/MySQL
composer require bkstar123/mysql-search
Por ejemplo, su base de datos tiene una tabla articles con id, title, content, status, user_id, created_at, updated_at Columns.
Desea permitir a los usuarios buscar un término/palabra clave contra title, content .
Para hacerlo, solo haga los siguientes pasos:
a) En el modelo Article , importar y usar el rasgo Bkstar123MySqlSearchTraitsMySqlSearch
b) En el modelo Article , defina una propiedad estática pública llamada como $mysqlSearchable , por ejemplo:
<?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 desea utilizar la función de búsqueda de texto completo MySQL (compatible con MyIasm, innodb - Dado que los motores de almacenamiento MySQL 5.6+), los siguientes trabajos adicionales se deben cumplir:
-> Crear índice de texto completo para la tabla articles :
php artisan mysql-search:init "AppArticle"
Nota : Para eliminar el índice de texto completo de la tabla articles :
php artisan mysql-search:reset "AppArticle"
d) consulta de búsqueda
Búsqueda de texto completo (predeterminado) :
<?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 = [];
} Por defecto, el modo de búsqueda de texto completo predeterminado es el lenguaje natural. Puede cambiar este valor predeterminado utilizando FullText_Search_Mode Variable en el archivo .env , valores posibles: natural, boolean, query
Consulte https://www.w3resource.com/mysql/mysql-full-text-search-functions.php para obtener detalles sobre el lenguaje natual y el modo booleano. El modo de expansión de la consulta no se recomienda debido al hecho de que crea mucho ruido en el resultado de la búsqueda.
El mayor problema con los índices de texto completo es que no juega bien con índices regulares. Si realiza una consulta de búsqueda de texto completo en combinación con el uso de otros índices normales, tendrá una consulta muy ineficiente (mal rendimiento). Consulte https://medium.com/@kirkbackus/using-full-text-index-for-innodb-when-aearch-ingine-is-not-feasible-d666830b4000
Búsqueda parcial (usando el operador como %$ Searchterms %)
<?php
App Article:: search ( $ searchTerms , false ) // partial search with LIKE operator against a wildcard term e.g: %searchTerm%