Meilisearch-laravel-scout: ¿Cómo configurar un tiempo de espera personalizado para una búsqueda?

Creado en 26 abr. 2021  ·  8Comentarios  ·  Fuente: meilisearch/meilisearch-laravel-scout

Creé una gota de DigitalOcean siguiendo tu excelente tutorial y la estoy usando con éxito con Laravel 👌

El único problema que tengo es cuando el servidor está inactivo (se detiene manualmente o la CPU está a más del 100%).
No puedo encontrar dónde podría establecer un tiempo de espera corto para poder mostrar un error.
En este momento se está cargando indefinidamente esperando una respuesta del servidor inactivo.

Comentario más útil

Hola @desaintflorent ,

No estoy seguro de que esto sea lo que solicitó, pero según lo que dijo @ hi019 , puede anular MeilisearchServiceProvider para usar un cliente http personalizado.

ejemplo:

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]));
        });
    }
}

En ti config/app.php

'providers' => [
    // Other Service Providers

    App\Providers\MeilisearchServiceProvider::class,
],

Luego, debe deshabilitar Meilisearch para que no se descubra automáticamente agregando lo siguiente a su composer.json

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

Y si no me pierdo algo, deberías ser bueno, el tiempo de espera arrojará MeiliSearch\Exceptions\CommunicationException

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

Si alguien tiene una mejor opción, estaré encantado de leerla :smile:

Todos 8 comentarios

Hola @desaintflorent , si no me equivoco, este paquete no proporciona una opción para establecer un tiempo de espera. No soy un usuario de laravel, por lo que no puedo proporcionar ninguna solución con laravel.
Si alguien conoce una solución, no dude en compartirla sobre este problema 🙂

Me alegra leer que le gustó el tutorial DO en nuestros documentos, ¡hacemos todo lo posible para proporcionar integraciones con buena documentación!

Creo que esto tendría que hacerse en el nivel de Meilisearch PHP Client pasando una instancia GuzzleHTTP personalizada al cliente: https://github.com/meilisearch/meilisearch-php#customize -your-http-client

No hay una manera de hacer esto con el actual. Tal vez podríamos permitir que el usuario pase un Cliente PHP Meilisearch personalizado en la configuración

Esta sería una gran adición. Sin embargo, de acuerdo con este problema donde explico el contexto, este repositorio no tendrá ninguna adición nueva que no sea consistente con larvel/scout
Podríamos crear un nuevo repositorio que será más un complemento meilisearch-laravel-scout-extended, e integraremos este tipo de posibilidad en él. Dejo abierto este problema ya que es una buena idea de mejora para el próximo repositorio (o la próxima versión de este repositorio).

Hola @desaintflorent ,

No estoy seguro de que esto sea lo que solicitó, pero según lo que dijo @ hi019 , puede anular MeilisearchServiceProvider para usar un cliente http personalizado.

ejemplo:

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]));
        });
    }
}

En ti config/app.php

'providers' => [
    // Other Service Providers

    App\Providers\MeilisearchServiceProvider::class,
],

Luego, debe deshabilitar Meilisearch para que no se descubra automáticamente agregando lo siguiente a su composer.json

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

Y si no me pierdo algo, deberías ser bueno, el tiempo de espera arrojará MeiliSearch\Exceptions\CommunicationException

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

Si alguien tiene una mejor opción, estaré encantado de leerla :smile:

@shokme , probablemente debería registrar el proveedor en app.php en su lugar: https://laravel.com/docs/8.x/providers#registering -providers

@shokme , probablemente debería registrar el proveedor en app.php en su lugar: https://laravel.com/docs/8.x/providers#registering -providers

De hecho, tomé el ejemplo de la instalación local del telescopio, pero tiene razón, también creo que esto es mejor.

Gracias a todos por su ayuda !

@shokme, su ejemplo funciona perfectamente, entendí su código, pero me habría tomado mucho tiempo resolver esto :) Así que muchas gracias por su ayuda.

Solo una cosa, cuando deshabilito Meilisearch para que no se descubra automáticamente, tuve un error al ejecutar una búsqueda ("Driver [meilisearch] no compatible").
Pero al no desactivarlo, funciona en mi entorno local. Probaré en producción pronto.
¿Por qué es importante desactivarlo?

Traté de reproducir su error y la única forma fue no extender \Meilisearch\Scout\MeilisearchServiceProvider desde App\Providers\MeilisearchServiceProvider .

Pero, el código que les mostré es principalmente del paquete del telescopio. Por lo tanto, "no descubrir" no registrará el paquete de forma predeterminada y le permitirá cargarlo cuando sea necesario. mi error, puedes evitar esto .

Ahora, alrededor de App\Providers\MeilisearchServiceProvider , si tengo razón y no extiende el proveedor del paquete, funciona, bien. Pero para ser honesto, no estoy seguro de cómo se manejará detrás de escena.
Supongo que el paquete Meilisearch se registrará y luego el proveedor personalizado se registrará y anulará el cliente único. Su elección de extenderse o no en eso, ya que no puedo dar una respuesta clara.

Por cierto, hoy se lanzó laravel-scout 9 con el soporte de meilisearch como paquete propio, es posible que desee usarlo, el código de este paquete se fusionó dentro de scout para que no cambie nada para usted.

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

elfeffe picture elfeffe  ·  30Comentarios

milosevicn picture milosevicn  ·  5Comentarios

Cannonb4ll picture Cannonb4ll  ·  6Comentarios

ctf0 picture ctf0  ·  7Comentarios

curquiza picture curquiza  ·  17Comentarios