CatalogSearch - استبعاد أسماء المنتجات الفرعية من النص الكامل

magento.stackexchange https://magento.stackexchange.com//questions/37032

سؤال

لقد كنت أستخدم البحث في الكتالوج لفترة من الوقت، وقد انتهيت تقريبًا، ولكن هناك شيء غريب يحدث لي.الوحيد "صالحة للاستخدام في البحث"الصفات هي name, child_skus و synonyme.في child_skus, ، أقوم بتخزين رموز التعريف الخاصة بالمنتجات المرتبطة بمنتجاتي المجمعة، حيث إنني أعمل مع المنتجات المجمعة فقط على الواجهة الأمامية. synonyme يحتوي على قائمة بالكلمات المفصولة بغيبوبة والتي تتعلق بالمنتج المذكور.

ما أستخدمه للبحث عن النص الكامل هو الكود التالي:

$query = Mage::getModel('catalogsearch/query')->setQueryText($searchText)->prepare();
$fulltextResource = Mage::getResourceModel('catalogsearch/fulltext')->prepareResult(
            Mage::getModel('catalogsearch/fulltext'), 
            $searchText, 
            $query
        );
$products->getSelect()->joinInner(
            array('search_result' => $products->getTable('catalogsearch/result')),
            $products->getConnection()->quoteInto(
                'search_result.product_id=e.entity_id AND search_result.query_id=?',
                $query->getId()
            ),
            array('relevance' => 'relevance')
        );
$products->getSelect()->order('relevance DESC');  

كل شيء يعمل بشكل جيد في الوقت الراهن، يستثني وبطريقة ما، يقوم أيضًا بفهرسة اسم المنتج المرتبط في جدول النص الكامل، مما يؤدي في النهاية إلى تشويش بحثي لأنه يؤدي إلى نتائج متحيزة.

هل لدى أي شخص أي فكرة عن كيفية تغيير هذا السلوك أو التحكم فيه من خلال المشرف؟

هل كانت مفيدة؟

المحلول

نلقي نظرة على الطريقة Mage_CatalogSearch_Model_Resource_Fulltext::_rebuildStoreIndex.هذا هو الذي يعيد بالفعل بناء فهرس البحث عن النص الكامل.
في مكان ما بداخله ستجد هذا:

$productChildren = $this->_getProductChildIds($productData['entity_id'], $productData['type_id']);
$productRelations[$productData['entity_id']] = $productChildren;

و لاحقا

if ($productChildren = $productRelations[$productData['entity_id']]) {
   foreach ($productChildren as $productChildId) {
       if (isset($productAttributes[$productChildId])) {
           $productIndex[$productChildId] = $productAttributes[$productChildId];
       }
   }
}

وهذا يعني أنه بالنسبة للمنتجات القابلة للتكوين والمجمعة والمجمعة، يتم فهرسة سمات المنتج الفرعية أيضًا.
يمكنك إعادة كتابة النموذج وإزالة هذه الأجزاء، أو تركه كما هو وإعادة كتابة الطريقة ببساطة _getProductChildIds في نفس الفصل وإعادته null لذلك سيكون الأمر كما لو أنه لا توجد منتجات فرعية لأي منتج آخر.
بهذه الطريقة لن تتم فهرسة المنتجات الفرعية في بيانات المنتج الأصلي.

نصائح أخرى

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

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى magento.stackexchange
scroll top