Meilisearch-laravel-scout: كيفية إعداد مهلة مخصصة للبحث؟

تم إنشاؤها على ٢٦ أبريل ٢٠٢١  ·  8تعليقات  ·  مصدر: meilisearch/meilisearch-laravel-scout

لقد أنشأتُ قطرة DigitalOcean باتباع البرنامج التعليمي الرائع الخاص بك ، وأنا أستخدمها بنجاح مع Laravel 👌

المشكلة الوحيدة التي أواجهها هي عندما يكون الخادم معطلاً (متوقف يدويًا أو وحدة المعالجة المركزية عند أكثر من 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,
],

بعد ذلك ، يجب عليك تعطيل اكتشاف Meilisearch تلقائيًا عن طريق إضافة ما يلي إلى composer.json

   ...
    "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.
إذا كان شخص ما يعرف حلًا بديلًا ، فلا تتردد في مشاركته حول هذه المشكلة 🙂

يسعدنا قراءة برنامج DO التعليمي على مستنداتنا ، فنحن نبذل قصارى جهدنا لتوفير عمليات تكامل مع وثائق لطيفة!

أعتقد أن هذا يجب أن يتم على مستوى Meilisearch PHP Client عن طريق تمرير مثيل GuzzleHTTP مخصص إلى العميل: https://github.com/meilisearch/meilisearch-php#customize -your-http-client

لا توجد طريقة للقيام بذلك مع ملف. ربما يمكننا السماح للمستخدم بتمرير عميل Meilisearch PHP مخصص في ملف config

هذا سيكون إضافة كبيرة. ومع ذلك ، وفقًا لهذه المشكلة حيث أشرح السياق ، لن يحتوي هذا الريبو على أي إضافة جديدة لن تكون متوافقة مع larvel / scout
قد ننشئ ريبوًا جديدًا سيكون مكونًا إضافيًا ممتدًا من meilisearch-laravel-scout ، وسنقوم بدمج هذا النوع من الاحتمالية فيه. تركت هذه المشكلة مفتوحة لأنها فكرة جيدة لتحسين الريبو التالي (أو الإصدار التالي من الريبو).

مرحبا 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,
],

بعد ذلك ، يجب عليك تعطيل اكتشاف Meilisearch تلقائيًا عن طريق إضافة ما يلي إلى composer.json

   ...
    "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 مثالك يعمل بشكل مثالي ، لقد فهمت الكود الخاص بك ولكن الأمر كان سيستغرق الكثير من الوقت لمعرفة ذلك :) لذا شكرًا جزيلاً على مساعدتك.

شيء واحد فقط ، عندما قمت بتعطيل اكتشاف Meilisearch تلقائيًا ، كان لدي خطأ عند تشغيل البحث ("برنامج التشغيل [meilisearch] غير مدعوم.")
ولكن من خلال عدم تعطيلها ، فهي تعمل على بيئتي المحلية. سنحاول في الإنتاج قريبا.
لماذا من المهم تعطيله؟

حاولت إعادة إنتاج الخطأ وكانت الطريقة الوحيدة هي عدم تمديد \Meilisearch\Scout\MeilisearchServiceProvider من App\Providers\MeilisearchServiceProvider .

لكن الكود الذي أظهرته لكم هو في الغالب من حزمة التلسكوب. لذلك لن تقوم "dont-Discover" بتسجيل الحزمة افتراضيًا وتسمح لك بتحميلها عند الحاجة. خطأي ، يمكنك تجنب هذا .

الآن حول App\Providers\MeilisearchServiceProvider ، إذا كنت على حق ولم تقم بتمديد الموفر من الحزمة ، فهو يعمل ، جيد. لكن لأكون صادقًا ، لست متأكدًا من كيفية التعامل معها خلف الكواليس.
تخميني هو أن حزمة Meilisearch سيتم تسجيلها ومن ثم سيتم تسجيل الموفر المخصص وتجاوز العميل الفردي. اختيارك للتمديد أو عدم التمديد لأنني لست قادرًا على إعطاء إجابة واضحة.

بالمناسبة ، تم إصدار Laravel-scout 9 اليوم بدعم من meilisearch كحزمة للطرف الأول ، قد ترغب في استخدامه ، تم دمج كود هذه الحزمة داخل الكشافة لذلك لن يغير أي شيء بالنسبة لك.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات