Meilisearch-laravel-scout: 如何为搜索设置自定义超时?

创建于 2021-04-26  ·  8评论  ·  资料来源: meilisearch/meilisearch-laravel-scout

我按照您的精彩教程创建了一个 DigitalOcean 液滴,并且我在 Laravel 中成功使用了它👌

我遇到的唯一问题是服务器关闭时(手动停止或 CPU 超过 100%)。
我找不到可以设置短超时的位置以便显示错误?
现在它正在无限期地加载等待来自死服务器的响应。

最有用的评论

你好@desaintflorent

我不确定这是您要求的,但根据@hi019所说,您可以覆盖 Meil​​isearchServiceProvider 以使用自定义 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 来禁用 Meil​​isearch 被自动发现

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

如果我没有错过你应该做得好的东西,超时将抛出MeiliSearch\Exceptions\CommunicationException

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

如果有人有更好的选择,我会很高兴阅读它:微笑:

所有8条评论

你好@desaintflorent ,如果我没记错的话,这个包不提供设置超时的选项。 我不是 laravel 用户,所以我无法为 laravel 提供任何解决方法。
如果有人知道解决方法,请随时在此问题上分享🙂

很高兴看到您喜欢我们文档中的 DO 教程,我们尽最大努力提供带有精美文档的集成!

我相信这必须在 Meil​​isearch PHP 客户端级别通过将自定义 GuzzleHTTP 实例传递给客户端来完成: https ://github.com/meilisearch/meilisearch-php#customize -your-http-client

目前没有办法做到这一点。 也许我们可以允许用户在配置中传递一个自定义的 Meil​​isearch PHP 客户端

这将是一个很好的补充。 但是,根据我解释上下文的这个问题,这个 repo 不会有任何与 larvel/scout 不一致的新添加
我们可能会创建一个新的 repo,它更像是一个 meilisearch-laravel-scout-extended 插件,我们会将这种可能性集成到其中。 我让这个问题打开,因为它是改进下一个 repo(或这个 repo 的下一个版本)的好主意。

你好@desaintflorent

我不确定这是您要求的,但根据@hi019所说,您可以覆盖 Meil​​isearchServiceProvider 以使用自定义 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 来禁用 Meil​​isearch 被自动发现

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

如果我没有错过你应该做得好的东西,超时将抛出MeiliSearch\Exceptions\CommunicationException

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

如果有人有更好的选择,我会很高兴阅读它:微笑:

@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您的示例运行良好,我理解您的代码,但是我需要花费大量时间才能弄清楚这一点:) 非常感谢您的帮助。

只是一件事,当我禁用自动发现 Meil​​isearch 时,我在运行搜索时出错(“不支持驱动程序 [meilisearch]。”)
但是通过不禁用它,它可以在我的本地环境中运行。 将很快投入生产。
为什么禁用它很重要?

我试图重现您的错误,唯一的方法是不从App\Providers\MeilisearchServiceProvider扩展\Meilisearch\Scout\MeilisearchServiceProvider #$ 。

但是,我向您展示的代码主要来自望远镜包。 所以“dont-discover”默认不会注册包,允许你在需要的时候加载它。 我的错误,你可以避免这种情况

现在关于App\Providers\MeilisearchServiceProvider ,如果我是对的并且您没有从包中扩展提供程序,那么它可以工作,很好。 但老实说,我不确定在幕后如何处理。
我的猜测是 Meil​​isearch 包将被注册,然后自定义提供程序将被注册并覆盖客户端单例。 您选择是否扩展该选项,因为我无法给出明确的答案。

顺便说一句,今天 laravel-scout 9 已经发布,支持 meilisearch 作为第一方包,你可能想使用它,这个包的代码已经合并到 scout 中,所以它不会为你改变任何东西。

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

JexPY picture JexPY  ·  8评论

milosevicn picture milosevicn  ·  5评论

curquiza picture curquiza  ·  17评论

dreamcog picture dreamcog  ·  14评论

husonghua picture husonghua  ·  5评论