Adonis Scout fournit une solution basée sur un pilote pour rechercher vos modèles Lucid, fortement inspirée de Laravel Scout et Scout Elasticsearch Driver.
Utilisez npm ou Yarn pour installer le package :
npm -i @brainnit/adonisjs-scout
# or
yarn add @brainnit/adonisjs-scout
Ajoutez Scout à la liste des fournisseurs de services sur start/app.js
:
const providers = [
// ...
'@brainnit/adonisjs-scout/providers/ScoutProvider' ,
'@brainnit/adonisjs-scout/providers/IndexKeeperProvider'
] ;
Copiez config/index.js
dans le dossier de configuration de votre application et nommez- scout.js
. N'oubliez pas de configurer vos variables d'environnement.
Vous devrez peut-être également installer des dépendances supplémentaires en fonction du pilote du moteur de recherche que vous utiliserez. Par exemple, pour utiliser Elasticsearch, vous aurez besoin de :
npm i --save elasticsearch bodybuilder
# or
yarn add elasticsearch bodybuilder
Ajoutez le trait @provider:Searchable
à vos modèles et définissez uniquement les méthodes que vous souhaitez remplacer pour modifier le comportement par défaut :
/** @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
Ensuite, créez votre premier IndexKeeper et exécutez les commandes suivantes pour créer/supprimer des index sur votre application :
# if you want to create your indexes
adonis scout:up
# or this if you want to drop indexes
adonis scout:down
Une règle de recherche est une classe qui décrit comment une requête de recherche sera exécutée et vous permettra de créer des recherches complexes et réutilisables avec la prise en charge de l'instance Builder
.
Pour créer une règle de recherche, utilisez la commande suivante :
adonis make:searchableRule MySearchRule
Dans le fichier app/Models/SearchableRules/MySearchRule.js vous trouverez une définition de classe :
'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
Pour indiquer à Scout les règles de recherche prises en charge par votre modèle, ajoutez simplement la méthode suivante :
/**
* 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' ]
}
Quoi d'autre? Veuillez ouvrir un problème pour des suggestions.