แพ็คเกจที่มีน้ำหนักเบาเพื่อเปิดใช้งานการค้นหาข้อความแบบเต็มและการค้นหาบางส่วนสำหรับแอปพลิเคชัน Laravel/MySQL
composer require bkstar123/mysql-search
ตัวอย่างเช่นฐานข้อมูลของคุณมีตาราง articles ที่มี id, title, content, status, user_id, created_at, updated_at
คุณต้องการอนุญาตให้ผู้ใช้ค้นหาคำศัพท์/คำหลักกับ title, content
เพื่อที่จะทำเช่นนั้นเพียงทำตามขั้นตอนต่อไปนี้:
a) ในรูปแบบ Article นำเข้าและใช้ลักษณะ Bkstar123MySqlSearchTraitsMySqlSearch
b) ในรูปแบบ Article กำหนดคุณสมบัติคงที่สาธารณะที่ชื่อว่า $mysqlSearchable ตัวอย่างเช่น:
<?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) หากคุณต้องการใช้คุณสมบัติการค้นหาข้อความ MySQL เต็มรูปแบบ (รองรับโดย MYIASM, InnoDB - เนื่องจาก MySQL 5.6+ storage Engines) งานด้านล่างจะต้องปฏิบัติตาม:
-> สร้างดัชนี fulltext สำหรับตาราง articles :
php artisan mysql-search:init "AppArticle"
หมายเหตุ : หากต้องการลบดัชนี fulltext ออกจากตาราง articles :
php artisan mysql-search:reset "AppArticle"
d) ค้นหาคำค้นหา
การค้นหาข้อความแบบเต็ม (ค่าเริ่มต้น) :
<?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 = [];
} โดยค่าเริ่มต้นโหมดการค้นหาข้อความแบบเต็มเริ่มต้นเป็นภาษาธรรมชาติ คุณสามารถเปลี่ยนค่าเริ่มต้นนี้ได้โดยใช้ตัวแปร fulltext_search_mode ในไฟล์ .env , ค่าที่เป็นไปได้: natural, boolean, query
อ้างถึง https://www.w3resource.com/mysql/mysql-full-text-search-functions.php สำหรับรายละเอียดเกี่ยวกับโหมดภาษาและบูลีน ไม่แนะนำโหมดการขยายแบบสอบถามเนื่องจากข้อเท็จจริงที่ว่ามันสร้างเสียงรบกวนมากมายในผลการค้นหา
ปัญหาที่ใหญ่ที่สุดของดัชนีข้อความเต็มคือ thay ไม่ได้เล่นอย่างดีกับดัชนีปกติ หากคุณทำการค้นหาข้อความเต็มรูปแบบร่วมกับการใช้ดัชนีปกติอื่น ๆ คุณจะมีแบบสอบถามที่ไม่มีประสิทธิภาพมาก (ประสิทธิภาพที่ไม่ดี) อ้างถึง https://medium.com/@kirkbackus/using-full-text-index-for-innodb-when-a-search-engine-is-is-not-feas-d666830b4000
การค้นหาบางส่วน (โดยใช้ตัวดำเนินการเช่น %$ searchterms %)
<?php
App Article:: search ( $ searchTerms , false ) // partial search with LIKE operator against a wildcard term e.g: %searchTerm%