حزمة خفيفة الوزن لتمكين البحث عن النص الكامل والبحث الجزئي عن تطبيقات Laravel/MySQL
composer require bkstar123/mysql-search
على سبيل المثال ، تحتوي قاعدة البيانات الخاصة بك على جدول articles يحتوي على id, title, content, status, user_id, created_at, updated_at أعمدة.
تريد السماح للمستخدمين بالبحث عن مصطلح/كلمة رئيسية مقابل title, content .
من أجل القيام بذلك ، ما عليك سوى القيام بالخطوات التالية:
أ) في نموذج Article ، استيراد واستخدام السمة Bkstar123MySqlSearchTraitsMySqlSearch
ب) في نموذج 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 ' ];
//...
}ج) إذا كنت ترغب في استخدام ميزة البحث عن النص الكامل MySQL (بدعم من MyiASM ، Innodb - منذ MySQL 5.6+ محركات التخزين) ، يتم الوفاء بالأعمال الإضافية أدناه:
-> إنشاء فهرس النص الكامل articles :
php artisan mysql-search:init "AppArticle"
ملاحظة : لإزالة فهرس النص الكامل من جدول articles :
php artisan mysql-search:reset "AppArticle"
د) البحث عن استعلام
البحث عن النص الكامل (افتراضي) :
<?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-not-feasible-d666830b4000
البحث الجزئي (باستخدام المشغل مثل ٪ $ searchterms ٪)
<?php
App Article:: search ( $ searchTerms , false ) // partial search with LIKE operator against a wildcard term e.g: %searchTerm%