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' ]
}
อะไรอีก? กรุณาเปิดประเด็นเพื่อรับข้อเสนอแนะ