2011-09-06 7 views
2

Nous avons actuellement un site Web Magento avec un large inventaire, nous avons quelques problèmes avec la pertinence des résultats de recherche ON SITE. Nous sommes actuellement configurés pour "combiner like et fulltext" mais les résultats ne sont pas ce que nous attendions. Par exemple, la recherche de 'Lee Child' (l'auteur), apporte trois livres de Lee Child, puis trois livres avec l'auteur comme 'Lauren Child' et ensuite le reste des livres de Lee Child. Donc, essentiellement, nous voulons donner la préférence à la recherche en texte intégral et voir ces résultats AVANT les résultats de recherche similaires. Nous voulons également afficher en stock les produits avant les produits en rupture de stock.Magento Moteur de recherche Pertinence Problèmes

Nous avons un serveur de test et j'ai lu un message sur le forum qui dit qu'au moment où magento divise la requête de recherche et montre les produits qui ont au moins un des mots.

Nous avons modifié la ligne 342 (pour CE1.4.2) du Mage_CatalogSearch_Model_Mysql4_Fulltext:

if ($like) { 
$likeCond = '(' . join(' OR ', $like) . ')'; 
} 

et le changement « OU » avec « et » `

Chemin: app/code/core/Mage/CatalogSearch/Model/Mysql4/Fulltext.php

C'est une solution pour une édition antérieure et nous sommes actuellement en cours d'exécution 1.5.0.1.

Y at-il quelque chose qui me manque pour bricoler avec la pertinence des résultats de recherche Magento ou pouvez-vous me pointer dans la bonne direction dans le code?

+1

J'ai vu cette question: http://stackoverflow.com/questions/1953715/magento-search-not-returning-expected-results mais je ne suis pas sûr qu'il est vrai que Magento affiche moins d'abord d'abord? – WOBenji

Répondre

0

Pour une recherche AND au lieu de OU, vous devrez réécrire la classe

Mage_CatalogSearch_Model_Resource_Fulltext 

Dans la méthode

public function prepareResult($object, $queryText, $query) 

vous voulez changer la partie

$likeCond = '(' . join(' OR ', $like) . ')'; 

à

$likeCond = '(' . join(' AND ', $like) . ')'; 

Assurez-vous de réindexer l'index de recherche par la suite pour avoir un effet.

0

Je crois que les disparus « clés » sont les deux éléments suivants:

<action method="setDefaultDirection"><string>desc</string></action> 
<action method="setDefaultOrder"><string>relevance</string></action> 

Vous devriez pouvoir acomplish ce deux manières différentes ... dans les deux cas, vous aurez besoin de faire des copies locales de lesdits fichiers.

1) Si vous ne possédez pas déjà un, ajoutez une copie locale de « catalogsearch.xml »

Note: Depuis mises en page Magento travail « en cascade », il est une bonne idée de vérifier d'abord tout "autre" répertoire de mise en page Magento disponible (autre que la 'base'). Par exemple, dans mon cas, nous utilisons EE, donc nous vérifions d'abord le répertoire de mise en page 'entreprise' pour copier les fichiers avant de regarder dans le répertoire 'base'.

lieux communs de 'catalogsearch.xml':

/app/design/frontend/base/default/layout/CatalogSearch.xml (en dernier recours) /app/design/frontend/enterprise/default/layout/catalogsearch.xml (pour EE) Note: Il peut y avoir un autre endroit avec PE aussi ... Je ne suis pas 100%.

2) Ajouter les éléments suivants dans la section 'catalogsearch_result_index' dans 'catalogsearch.xml':

<action method="setDefaultDirection"><string>desc</string></action> 
<action method="setDefaultOrder"><string>relevance</string></action> 

Par exemple:

Référencer la poignée de 'search_result_list' (c.-à la mise en page de l'entreprise):

<reference name="search_result_list"> 
    <action method="setDefaultDirection"><string>desc</string></action> 
    <action method="setDefaultOrder"><string>relevance</string></action> 
</reference> 

il serait finir par semblable à:

<catalogsearch_result_index> 
...other code 

    <reference name="search_result_list"> 
     <action method="setDefaultDirection"><string>desc</string></action> 
     <action method="setDefaultOrder"><string>relevance</string></action> 
    </reference> 

...other code 

</catalogsearch_result_index> 

Ou vous pouvez placer directement dans le bloc 'search_result_list' (ie mise en page de base):

<catalogsearch_result_index translate="label"> 
    <label>Quick Search Form</label> 
    <reference name="root"> 
     <action method="setTemplate"><template>page/3columns.phtml</template></action> 
    </reference> 
    <reference name="left"> 
     <block type="catalogsearch/layer" name="catalogsearch.leftnav" after="currency" template="catalog/layer/view.phtml"/> 
    </reference> 
    <reference name="content"> 
     <block type="catalogsearch/result" name="search.result" template="catalogsearch/result.phtml"> 
      <block type="catalog/product_list" name="search_result_list" template="catalog/product/list.phtml"> 

       <action method="setDefaultDirection"><string>desc</string></action> 
       <action method="setDefaultOrder"><string>relevance</string></action> 

       <block type="catalog/product_list_toolbar" name="product_list_toolbar" template="catalog/product/list/toolbar.phtml"> 
        <block type="page/html_pager" name="product_list_toolbar_pager"/> 
       </block> 
       <action method="addColumnCountLayoutDepend"><layout>empty</layout><count>6</count></action> 
       <action method="addColumnCountLayoutDepend"><layout>one_column</layout><count>5</count></action> 
       <action method="addColumnCountLayoutDepend"><layout>two_columns_left</layout><count>4</count></action> 
       <action method="addColumnCountLayoutDepend"><layout>two_columns_right</layout><count>4</count></action> 
       <action method="addColumnCountLayoutDepend"><layout>three_columns</layout><count>3</count></action> 
       <action method="setToolbarBlockName"><name>product_list_toolbar</name></action> 
      </block> 
      <action method="setListOrders"/> 
      <action method="setListModes"/> 
      <action method="setListCollection"/> 
     </block> 
    </reference> 
</catalogsearch_result_index> 

3) Assurez-vous de vider le cache Magento/stockage et réindexation.

L'autre option serait de les placer comme « cachée » des éléments de formulaire dans « form.mini.phtml »

1) Placez les éléments suivants dans la forme « form.mini.phtml »:

<input type="hidden" name="order" value="relevance"> 
<input type="hidden" name="dir" value="desc"> 

maintenant, le début de la forme « form.mini.phtml » ressemblerait à:

<form id="search_mini_form" action="<?php echo $this->helper('catalogsearch')->getResultUrl() ?>" method="get"> 
     <input type="hidden" name="order" value="relevance"> 
     <input type="hidden" name="dir" value="desc"> 
    ...other code 

2) Modifiez le chemin de modèle « form.mini.phtml » dans le « défaut » section (main de référence 'en-tête' le) dans 'catalogsearch.xml':

<default> 
     <reference name="header"> 
      <block type="core/template" name="top.search" as="topSearch" template="custom_template/catalogsearch/form.mini.phtml"/> 
     </reference> 
... other code 

3) Assurez-vous de vider le cache Magento/stockage et réindexation.

Note finale ... Vous trouverez ci-dessous la structure de chemin "modèle personnalisé" dans laquelle nous l'avons configuré. Situé dans le répertoire 'enterprise', donc mes fichiers personnalisés seraient situés: /app/design/frontend/enterprise/custom_template/layout/catalogsearch.xml /app/design/frontend/entreprise/custom_template/template/catalogsearch/form .mini.phtml

Espérons que cela a du sens et aide.

Questions connexes