Meilisearch-laravel-scout: 検索のカスタムタイムアウトを設定するにはどうすればよいですか?

作成日 2021年04月26日  ·  8コメント  ·  ソース: meilisearch/meilisearch-laravel-scout

私はあなたの素晴らしいチュートリアルに従ってDigitalOceanドロップレットを作成し、Laravelでうまく使用しています👌

私が抱えている唯一の問題は、サーバーがダウンしているとき(手動で停止したとき、またはCPUが100%を超えたとき)です。
エラーを表示できるように、短いタイムアウトを設定できる場所が見つかりませんか?
現在、デッドサーバーからの応答を待って無期限にロードしています。

最も参考になるコメント

こんにちは@desaintflorent

これがあなたが求めていたものかどうかはわかりませんが、 @ hi019の発言に基づいて、MeilisearchServiceProviderをオーバーライドしてカスタムhttpクライアントを使用できます。

例:

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

あなたの中config/app.php

'providers' => [
    // Other Service Providers

    App\Providers\MeilisearchServiceProvider::class,
],

次に、composer.jsonに以下を追加して、Meilisearchが自動検出されないようにする必要があります。

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

そして、私があなたが良いはずの何かを見逃さなければ、タイムアウトはMeiliSearch\Exceptions\CommunicationExceptionをスローします

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

誰かがより良い選択肢を持っているなら、私はそれを読んでうれしいです:smile:

全てのコメント8件

こんにちは@desaintflorent 、私が間違っていなければ、このパッケージはタイムアウトを設定するオプションを提供していません。 私はlaravelユーザーではないため、laravelの回避策を提供することはできません。
誰かが回避策を知っている場合は、この問題についてお気軽に共有してください🙂

ドキュメントのDOチュートリアルが気に入ってくださったことをうれしく思います。すばらしいドキュメントとの統合を提供するために、最善を尽くしています。

これは、カスタムGuzzleHTTPインスタンスをクライアントに渡すことにより、Meilisearch PHPクライアントレベルで実行する必要があると思います: https ://github.com/meilisearch/meilisearch-php#customize -your-http-client

現在、これを行う方法はありません。 たぶん、ユーザーが設定でカスタムMeilisearchPHPクライアントを渡すことを許可できます

これは素晴らしい追加になるでしょう。 ただし、コンテキストを説明するこの問題によると、このリポジトリには、larvel / scoutと一致しない新しい追加はありません。
よりmeilisearch-laravel-scout-extendedプラグインとなる新しいリポジトリを作成する可能性があり、この種の可能性をそれに統合します。 次のレポジトリ(またはこのレポジトリの次のバージョン)の改善の良いアイデアなので、この問題を公開しました。

こんにちは@desaintflorent

これがあなたが求めていたものかどうかはわかりませんが、 @ hi019の発言に基づいて、MeilisearchServiceProviderをオーバーライドしてカスタムhttpクライアントを使用できます。

例:

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

あなたの中config/app.php

'providers' => [
    // Other Service Providers

    App\Providers\MeilisearchServiceProvider::class,
],

次に、composer.jsonに以下を追加して、Meilisearchが自動検出されないようにする必要があります。

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

そして、私があなたが良いはずの何かを見逃さなければ、タイムアウトはMeiliSearch\Exceptions\CommunicationExceptionをスローします

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

誰かがより良い選択肢を持っているなら、私はそれを読んでうれしいです:smile:

@shokme代わりにapp.phpにプロバイダーを登録する必要があります: https ://laravel.com/docs/8.x/providers#registering -providers

@shokme代わりにapp.phpにプロバイダーを登録する必要があります: https ://laravel.com/docs/8.x/providers#registering -providers

確かに、私は望遠鏡のローカルインストールから例を取りましたが、あなたは正しいです、私はまたこれがより良いと思います。

助けてくれてありがとう!

@shokmeあなたの例は完璧に機能しています、私はあなたのコードを理解しましたが、これを理解するのに多くの時間がかかりました:)それであなたの助けに感謝します。

一つだけ、Meilisearchの自動検出を無効にすると、検索の実行中にエラーが発生しました(「ドライバー[meilisearch]はサポートされていません。」)
しかし、それを無効にしないことで、それは私のローカル環境で機能しています。 すぐに本番環境で試してみます。
なぜそれを無効にすることが重要なのですか?

私はあなたのエラーを再現しようとしましたが、唯一の方法はApp\Providers\MeilisearchServiceProvider \Meilisearch\Scout\MeilisearchServiceProviderを拡張しないことでした。

しかし、私があなたに見せたコードはほとんど望遠鏡パッケージからのものです。 したがって、「dont-discover」はデフォルトではパッケージを登録せず、必要なときにロードできるようにします。 私の間違い、あなたはこれを避けることができます

さて、 App\Providers\MeilisearchServiceProviderについてです。私が正しく、パッケージからプロバイダーを拡張しなければ、うまくいきます。 しかし、正直なところ、舞台裏でどのように処理されるかはわかりません。
私の推測では、Meilisearchパッケージが登録されてから、カスタムプロバイダーが登録され、クライアントシングルトンが上書きされます。 私は明確な答えを与えることができないので、それを拡張するかどうかのあなたの選択。

ちなみに、今日、laravel-scout 9は、ファーストパーティパッケージとしてmeilisearchのサポートを受けてリリースされました。これを使用することをお勧めします。このパッケージのコードは、scout内でマージされているため、何も変更されません。

このページは役に立ちましたか?
0 / 5 - 0 評価