Um pacote leve para ativar a pesquisa de texto completo e a pesquisa parcial por aplicativos Laravel/MySQL
composer require bkstar123/mysql-search
Por exemplo, seu banco de dados possui uma tabela articles com id, title, content, status, user_id, created_at, updated_at .
Você deseja permitir que os usuários pesquisem um termo/palavra -chave no title, content .
Para fazer isso, basta fazer as seguintes etapas:
a) No modelo Article , importe e use a característica Bkstar123MySqlSearchTraitsMySqlSearch
b) No modelo Article , defina uma propriedade estática pública nomeada como $mysqlSearchable , por exemplo:
<?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) Se você deseja usar o recurso de pesquisa de texto completo do MySQL (suportado pelo myiasma, Innodb - como os mecanismos de armazenamento MySQL 5.6+), os trabalhos adicionais abaixo devem ser cumpridos:
-> Crie Índice FullText para articles Tabela:
php artisan mysql-search:init "AppArticle"
NOTA : Para remover o índice FullText da tabela articles :
php artisan mysql-search:reset "AppArticle"
d) Consulta de pesquisa
Pesquisa completa de texto (padrão) :
<?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 padrão, o modo de pesquisa de texto completo padrão é a linguagem natural. Você pode alterar esse valor padrão usando FullText_search_mode Variável no arquivo .env , possíveis valores: natural, boolean, query
Consulte https://www.w3resource.com/mysql/mysql-ffull-text-search-functions.php para obter detalhes sobre linguagem natual e modo booleano. O modo de expansão da consulta não é recomendado devido ao fato de criar muito ruído no resultado da pesquisa.
O maior problema com os índices de texto completo é que Thay não joga bem com índices regulares. Se você fizer uma consulta de pesquisa de texto completo em combinação com o uso de outros índices normais, terá uma consulta muito ineficiente (desempenho ruim). Consulte https://medium.com/@kirkbackus/using-full-text-index-for-nnodb-when-a-search-engine-snot-não-fébitos-d66830b4000
Pesquisa parcial (usando o operador como %$ searchterms %)
<?php
App Article:: search ( $ searchTerms , false ) // partial search with LIKE operator against a wildcard term e.g: %searchTerm%