Adonis Scout proporciona una solución basada en controladores para buscar sus modelos Lucid, fuertemente inspirada en Laravel Scout y Scout Elasticsearch Driver.
Utilice npm o hilo para instalar el paquete:
npm -i @brainnit/adonisjs-scout
# or
yarn add @brainnit/adonisjs-scout
Agregue Scout a la lista de proveedores de servicios en start/app.js
:
const providers = [
// ...
'@brainnit/adonisjs-scout/providers/ScoutProvider' ,
'@brainnit/adonisjs-scout/providers/IndexKeeperProvider'
] ;
Copie config/index.js
a la carpeta de configuración de su aplicación y asígnele el nombre scout.js
. No olvide configurar las variables de entorno.
Es posible que también deba instalar dependencias adicionales según el controlador del motor de búsqueda que utilizará. Por ejemplo, para utilizar Elasticsearch necesitarás:
npm i --save elasticsearch bodybuilder
# or
yarn add elasticsearch bodybuilder
Agregue @provider:Searchable
a sus modelos y defina solo los métodos que desea anular para cambiar el comportamiento predeterminado:
/** @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
Luego, cree su primer IndexKeeper y ejecute los siguientes comandos para crear/eliminar índices en su aplicación:
# if you want to create your indexes
adonis scout:up
# or this if you want to drop indexes
adonis scout:down
Una regla de búsqueda es una clase que describe cómo se ejecutará una consulta de búsqueda y le permitirá crear búsquedas complejas y reutilizables con el soporte de la instancia Builder
.
Para crear una regla de búsqueda utilice el siguiente comando:
adonis make:searchableRule MySearchRule
En el archivo app/Models/SearchableRules/MySearchRule.js encontrará una definición de clase:
'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
Para informarle a Scout qué reglas de búsqueda admite su modelo, simplemente agregue el siguiente método:
/**
* 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' ]
}
¿Qué otra cosa? Abra un problema para recibir sugerencias.