CatalogSearch - استبعاد أسماء المنتجات الفرعية من النص الكامل
-
12-12-2019 - |
سؤال
لقد كنت أستخدم البحث في الكتالوج لفترة من الوقت، وقد انتهيت تقريبًا، ولكن هناك شيء غريب يحدث لي.الوحيد "صالحة للاستخدام في البحث"الصفات هي 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 بوحدة نمطية مناسبة لتحسين نتائج البحث حقًا.علاوة على ذلك، يمكنك حقًا إدارة الأمور بشكل أفضل باستخدام الاستعلامات الغامضة والبطاقات الجامحة وما إلى ذلك.