Paket ringan untuk mengaktifkan pencarian teks lengkap dan pencarian parsial untuk aplikasi Laravel/MySQL
composer require bkstar123/mysql-search
Misalnya, basis data Anda memiliki tabel articles dengan id, title, content, status, user_id, created_at, updated_at .
Anda ingin mengizinkan pengguna untuk mencari istilah/kata kunci terhadap title, content .
Untuk melakukannya, lakukan saja langkah -langkah berikut:
a) Dalam model Article , impor & gunakan sifat Bkstar123MySqlSearchTraitsMySqlSearch
b) Dalam model Article , tentukan properti statis publik bernama $mysqlSearchable , misalnya:
<?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) Jika Anda ingin menggunakan fitur pencarian teks lengkap MySQL (didukung oleh Myiasm, InnoDB - karena mesin penyimpanan MySQL 5.6+), karya tambahan di bawah ini harus dipenuhi:
-> Buat Indeks FullText untuk Tabel articles :
php artisan mysql-search:init "AppArticle"
Catatan : Untuk menghapus indeks fullText dari tabel articles :
php artisan mysql-search:reset "AppArticle"
d) Permintaan pencarian
Pencarian Teks Lengkap (Default) :
<?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 = [];
} Secara default, mode pencarian teks lengkap default adalah bahasa alami. Anda dapat mengubah nilai default ini dengan menggunakan variabel fullText_search_mode di file .env , nilai yang mungkin: natural, boolean, query
Lihat https://www.w3resource.com/mysql/mysql-full-text-search-functions.php untuk detail tentang bahasa natual & mode boolean. Mode ekspansi kueri tidak disarankan karena fakta bahwa itu menciptakan banyak kebisingan dalam hasil pencarian.
Masalah terbesar dengan indeks teks lengkap adalah bahwa mereka tidak bermain baik dengan indeks reguler. Jika Anda melakukan kueri pencarian teks lengkap dalam kombinasi dengan menggunakan indeks normal lainnya, Anda akan memiliki kueri yang sangat tidak efisien (kinerja buruk). Lihat https://medium.com/@kirkbackus/using-full-text-index-for-innodb-when-a-search-engine-is-not-fease-d666830b4000
Pencarian parsial (menggunakan operator seperti %$ Searchterms %)
<?php
App Article:: search ( $ searchTerms , false ) // partial search with LIKE operator against a wildcard term e.g: %searchTerm%