يوفر Adonis Scout حلاً يعتمد على برنامج التشغيل للبحث في نماذج Lucid الخاصة بك، وهو مستوحى بشكل كبير من Laravel Scout وScout Elasticsearch Driver.
استخدم npm أو الغزل لتثبيت الحزمة:
npm -i @brainnit/adonisjs-scout
# or
yarn add @brainnit/adonisjs-scout
أضف Scout إلى قائمة مقدمي الخدمة في start/app.js
:
const providers = [
// ...
'@brainnit/adonisjs-scout/providers/ScoutProvider' ,
'@brainnit/adonisjs-scout/providers/IndexKeeperProvider'
] ;
انسخ config/index.js
إلى مجلد تكوين التطبيق الخاص بك وقم بتسميته scout.js
. لا تنس إعداد متغيرات البيئة الخاصة بك.
قد تحتاج أيضًا إلى تثبيت تبعيات إضافية اعتمادًا على برنامج تشغيل محرك البحث الذي ستستخدمه. على سبيل المثال، لاستخدام Elasticsearch، ستحتاج إلى ما يلي:
npm i --save elasticsearch bodybuilder
# or
yarn add elasticsearch bodybuilder
أضف @provider:Searchable
إلى نماذجك وحدد فقط الطرق التي تريد تجاوزها لتغيير السلوك الافتراضي:
/** @type {typeof import('@adonisjs/lucid/src/Lucid/Model')} */
const Model = use ( 'Model' ) ;
class User extends Model {
static get traits ( ) {
return [ '@provider:Searchable' ]
}
}
module . exports = Users
بعد ذلك، قم بإنشاء IndexKeeper الأول الخاص بك وقم بتشغيل الأوامر التالية لإنشاء/حذف الفهارس في تطبيقك:
# if you want to create your indexes
adonis scout:up
# or this if you want to drop indexes
adonis scout:down
قاعدة البحث هي فئة تصف كيفية تنفيذ استعلام البحث وتسمح لك بإنشاء عمليات بحث معقدة وقابلة لإعادة الاستخدام بدعم من مثيل Builder
.
لإنشاء قاعدة بحث استخدم الأمر التالي:
adonis make:searchableRule MySearchRule
في الملف app/Models/SearchableRules/MySearchRule.js ستجد تعريف الفئة:
'use strict'
/** @type {typeof import('@brainnit/adonisjs-scout/src/SearchRule')} */
const SearchRule = use ( 'Scout/SearchRule' )
class MySearchRule extends SearchRule {
buildQuery ( ) {
return {
'must' : {
'match' : {
'name' : this . builder . query
}
}
}
}
}
module . exports = MySearchRule
لإخبار Scout عن قواعد البحث التي يدعمها نموذجك، ما عليك سوى إضافة الطريقة التالية:
/**
* Specify what search rules the model supports.
*
* The return value(s) must always class namespaces that will be
* resolved by IoC Container.
*
* @static
*
* @method searchableRules
*
* @return {Array|String} ES6 Class
*/
static searchableRules ( ) {
return [ 'App/Models/SearchRules/MySearchRule' ]
}
ماذا بعد؟ الرجاء فتح قضية للاقتراحات.