Meilisearch-laravel-scout: Como configurar um tempo limite personalizado para uma pesquisa?

Criado em 26 abr. 2021  ·  8Comentários  ·  Fonte: meilisearch/meilisearch-laravel-scout

Criei um droplet DigitalOcean seguindo seu ótimo tutorial, e estou usando com sucesso com Laravel 👌

O único problema que tenho é quando o servidor está inativo (parado manualmente ou CPU em mais de 100%).
Não consigo encontrar onde posso definir um tempo limite curto para exibir um erro?
No momento está carregando indefinidamente esperando uma resposta do servidor morto.

Comentários muito úteis

Olá @desaintflorent ,

Não tenho certeza se foi isso que você pediu, mas com base no que @hi019 disse, você pode substituir o MeilisearchServiceProvider para usar um cliente http personalizado.

exemplo:

php artisan make:provider MeilisearchServiceProvider
<?php

namespace App\Providers;

use MeiliSearch\Client;

class MeilisearchServiceProvider extends \Meilisearch\Scout\MeilisearchServiceProvider
{
    public function register()
    {
        parent::register();

        $this->app->singleton(Client::class, function () {
            return new Client(config('meilisearch.host'), config('meilisearch.key'), new \GuzzleHttp\Client(['timeout' => 0.01]));
        });
    }
}

Em você config/app.php

'providers' => [
    // Other Service Providers

    App\Providers\MeilisearchServiceProvider::class,
],

Em seguida, você deve desabilitar a descoberta automática do Meilisearch adicionando o seguinte ao seu composer.json

   ...
    "extra": {
        "laravel": {
            "dont-discover": [
                "meilisearch/meilisearch-laravel-scout"
            ]
        }
    },
   ...

E se eu não perder algo, você deve ser bom, o tempo limite lançará um MeiliSearch\Exceptions\CommunicationException

try {
    $movies = Movie::search('b')->get();
} catch (\MeiliSearch\Exceptions\CommunicationException $e) {
    // do something
}

Se alguém tiver uma opção melhor, ficarei feliz em ler :smile:

Todos 8 comentários

Olá @desaintflorent , se não estiver errado este pacote não fornece uma opção para definir um tempo limite. Eu não sou um usuário laravel, então não posso fornecer nenhuma solução alternativa com laravel.
Se alguém souber de uma solução alternativa, sinta-se à vontade para compartilhá-la sobre esse problema 🙂

Fico feliz em ler que você gostou do tutorial DO em nossos documentos, fazemos o nosso melhor para fornecer integrações com boa documentação!

Acredito que isso teria que ser feito no nível do Meilisearch PHP Client, passando uma instância personalizada do GuzzleHTTP para o cliente: https://github.com/meilisearch/meilisearch-php#customize -your-http-client

Não há uma maneira de fazer isso com o atualmente. Talvez possamos permitir que o usuário passe um cliente PHP Meilisearch personalizado na configuração

Esta seria uma grande adição. No entanto, de acordo com esta edição em que explico o contexto, este repositório não terá nenhuma nova adição que não seja consistente com larvel/scout
Podemos criar um novo repositório que será mais um plugin estendido do meilisearch-laravel-scout, e vamos integrar esse tipo de possibilidade nele. Deixo esse problema em aberto, pois é uma boa ideia de melhoria para o próximo repositório (ou a próxima versão deste repositório).

Olá @desaintflorent ,

Não tenho certeza se foi isso que você pediu, mas com base no que @hi019 disse, você pode substituir o MeilisearchServiceProvider para usar um cliente http personalizado.

exemplo:

php artisan make:provider MeilisearchServiceProvider
<?php

namespace App\Providers;

use MeiliSearch\Client;

class MeilisearchServiceProvider extends \Meilisearch\Scout\MeilisearchServiceProvider
{
    public function register()
    {
        parent::register();

        $this->app->singleton(Client::class, function () {
            return new Client(config('meilisearch.host'), config('meilisearch.key'), new \GuzzleHttp\Client(['timeout' => 0.01]));
        });
    }
}

Em você config/app.php

'providers' => [
    // Other Service Providers

    App\Providers\MeilisearchServiceProvider::class,
],

Em seguida, você deve desabilitar a descoberta automática do Meilisearch adicionando o seguinte ao seu composer.json

   ...
    "extra": {
        "laravel": {
            "dont-discover": [
                "meilisearch/meilisearch-laravel-scout"
            ]
        }
    },
   ...

E se eu não perder algo, você deve ser bom, o tempo limite lançará um MeiliSearch\Exceptions\CommunicationException

try {
    $movies = Movie::search('b')->get();
} catch (\MeiliSearch\Exceptions\CommunicationException $e) {
    // do something
}

Se alguém tiver uma opção melhor, ficarei feliz em ler :smile:

@shokme , você provavelmente deve registrar o provedor em app.php: https://laravel.com/docs/8.x/providers#registering -providers

@shokme , você provavelmente deve registrar o provedor em app.php: https://laravel.com/docs/8.x/providers#registering -providers

De fato, peguei o exemplo da instalação local do telescópio, mas você está certo, também acho que isso é melhor.

Obrigado a todos por sua ajuda !

@shokme seu exemplo está funcionando perfeitamente, entendi seu código, mas levaria muito tempo para descobrir isso :) Então, muito obrigado pela sua ajuda.

Só uma coisa, quando desabilito a descoberta automática do Meilisearch, tive um erro ao executar uma pesquisa ("Driver [meilisearch] não suportado." )
Mas ao não desativá-lo, ele está funcionando no meu ambiente local. Vai tentar em produção em breve.
Por que é importante desativá-lo?

Tentei reproduzir seu erro e a única maneira foi não estender \Meilisearch\Scout\MeilisearchServiceProvider de App\Providers\MeilisearchServiceProvider .

Mas, o código que mostrei para você é principalmente do pacote do telescópio. Portanto, "dont-discover" não registrará o pacote por padrão e permitirá que você o carregue quando necessário. meu erro, você pode evitar isso .

Agora sobre App\Providers\MeilisearchServiceProvider , se eu estiver certo e você não estender o provedor do pacote, funciona, bom. Mas, para ser honesto, não tenho certeza de como isso será tratado nos bastidores.
Meu palpite é que o pacote Meilisearch será registrado e, em seguida, o provedor personalizado será registrado e substituirá o singleton do cliente. Sua escolha de estender ou não essa, pois não sou capaz de dar uma resposta clara.

A propósito, hoje o laravel-scout 9 foi lançado com o suporte do meilisearch como pacote de primeira parte, você pode querer usá-lo, o código deste pacote foi mesclado dentro do scout para que não mude nada para você.

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

ctf0 picture ctf0  ·  7Comentários

dmyers picture dmyers  ·  14Comentários

elfeffe picture elfeffe  ·  30Comentários

milosevicn picture milosevicn  ·  5Comentários

husonghua picture husonghua  ·  5Comentários