Adonis Scout fornece uma solução baseada em driver para pesquisar seus modelos Lucid, fortemente inspirada no Laravel Scout e no Scout Elasticsearch Driver.
Use npm ou yarn para instalar o pacote:
npm -i @brainnit/adonisjs-scout
# or
yarn add @brainnit/adonisjs-scout
Adicione o Scout à lista de provedores de serviços em start/app.js
:
const providers = [
// ...
'@brainnit/adonisjs-scout/providers/ScoutProvider' ,
'@brainnit/adonisjs-scout/providers/IndexKeeperProvider'
] ;
Copie config/index.js
para a pasta de configuração do seu aplicativo e nomeie-o como scout.js
. Não se esqueça de configurar suas variáveis de ambiente.
Você também pode precisar instalar dependências extras, dependendo do driver do mecanismo de pesquisa que usará. Por exemplo, para usar o Elasticsearch você precisará de:
npm i --save elasticsearch bodybuilder
# or
yarn add elasticsearch bodybuilder
Adicione a característica @provider:Searchable
aos seus modelos e defina apenas os métodos que você deseja substituir para alterar o comportamento padrão:
/** @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
Depois, crie seu primeiro IndexKeeper e execute os seguintes comandos para criar/excluir índices em sua aplicação:
# if you want to create your indexes
adonis scout:up
# or this if you want to drop indexes
adonis scout:down
Uma regra de pesquisa é uma classe que descreve como uma consulta de pesquisa será executada e permite construir pesquisas complexas e reutilizáveis com o suporte da instância Builder
.
Para criar uma regra de pesquisa use o seguinte comando:
adonis make:searchableRule MySearchRule
No arquivo app/Models/SearchableRules/MySearchRule.js você encontrará uma definição 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
Para informar ao Scout quais regras de pesquisa seu modelo suporta, basta adicionar o seguinte 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' ]
}
O que mais? Abra um problema para sugestões.