Meilisearch-laravel-scout: تخطي البحث عن طريق المعرف

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

مرحبا،

عند إنشاء toSearchableArray لطراز معين ، إذا لم يكن هناك ID مضمّن في المصفوفة النهائية ، لا يمكنني استيراد البيانات باستخدام php artisan scout:import "App\Book" . ولكن إذا قمت بتضمين ID ، فسيصبح متاحًا للبحث عن طريق ID أيضًا ، وهو سلوك أود الهروب منه. ما هي الطريقة الصحيحة لتعطيل البحث عن طريق ID ؟

رمز المثال:

    public function toSearchableArray()
    {
        $array = $this->toArray();

        foreach(array_keys($array) as $key) {
            //if I unset ID also, I won't be able to import table data
            if(in_array($key, ['id', 'title', 'name'])) continue;
            unset($array[$key]);
        }

        return $array;
    }

التعليق الأكثر فائدة

يا milosevicn ،

يحدد ->toSearchableArray() البيانات المخزنة داخل MeiliSearch لمستند معين (كائن). سيؤدي حذف id إلى ظهور عناصر غير قابلة للاكتشاف داخل البحث لأن id افتراضيًا هو المفتاح الأساسي المستخدم لتعريف المستند.

لمنع MeiliSearch من البحث في جميع الحقول ، ضع في اعتبارك توسيع وظيفة هذه الحزمة وتعيين searchAttributes داخل MeiliSearch. يمكنك العثور على برنامج تعليمي للقيام بذلك هنا .

ال 5 كومينتر

يا milosevicn ،

يحدد ->toSearchableArray() البيانات المخزنة داخل MeiliSearch لمستند معين (كائن). سيؤدي حذف id إلى ظهور عناصر غير قابلة للاكتشاف داخل البحث لأن id افتراضيًا هو المفتاح الأساسي المستخدم لتعريف المستند.

لمنع MeiliSearch من البحث في جميع الحقول ، ضع في اعتبارك توسيع وظيفة هذه الحزمة وتعيين searchAttributes داخل MeiliSearch. يمكنك العثور على برنامج تعليمي للقيام بذلك هنا .

mmachatschek آسف على
عندما أقوم بإضافة مستندات باستخدام الأمر php artisan scout:import ، فإن كل شيء يعمل كما هو مفترض ، ولكن عندما أقوم بنفس الشيء باستخدام /indexes/:index_uid/documents route ( ->addDocuments() ) فإنه لا يحترم toSearchableArray() القواعد. لذلك إذا حاولت إضافة النموذج بالكامل ، فستتم إضافة جميع الأعمدة.
من المحتمل أن أكون قادرًا على التغلب على هذا عن طريق تحديد أعمدة معينة أثناء إجراء الاستعلام ، ولكن هل هناك طريقة لجعل الوظيفة addDocuments() نفسها على دراية بـ toSearchableArray() ؟

مرحبا milosevicn ،

هذه الحزمة هي في الأساس غلاف لمكتبة MeiliSearch PHP وتمتد Laravel Scout.

عند إضافة المستندات "يدويًا" ، يتم فقد كل السحر الذي يوفره Scout ، مثل إضافة كائنات جديدة إلى الفهرس أو تحديث الكائنات الموجودة بحقول محددة وما إلى ذلك ، لأنك تخطيت هذه الخطوات.

هل هناك نية محددة لديك بإضافة المستندات يدويًا؟

شكرا على الرد mmachatschek

لدي تطبيق متعدد الشركات - تطبيقان منفصلان (المالك والمستأجر). لهذا السبب ، لا يمكنني استخدام وظيفة Laravel Scout المحددة مسبقًا لتحديث المستندات تلقائيًا بمجرد إضافة شيء ما إلى قاعدة البيانات. لهذا السبب أستخدم الويب هوك لإبلاغ تطبيق المستأجر الخاص بي عند حدوث شيء ما في قاعدة البيانات فعليًا على المالك (عند الإنشاء / التحديث / الحذف). أرغب في إضافة تلك المستندات بمجرد أن أمسك webhook على المستأجر

milosevicn أعتقد أنه يمكنك فقط عمل $model->touch() . يؤدي هذا إلى تحديث العمود updated_at للنموذج وسيتم تشغيل حدث updated في تطبيق المستأجر. سيقوم مستمع حدث Scout بعد ذلك بتشغيل تحديث على الفهرس. هل هذا يعمل من أجلك؟

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