Como mejorar las busquedas rápidas en prestashop

Esto porque a veces buscamos algo en prestashop sobre todo para el tema de las tintas y te da siempre muchos resultados o ninguno, entonces modificamos la sentencia sql para afinar los resultados de las búsquedas.

Shop Parameters -> Search -> Buscar en el interior de las palabras -> No

Shop Parameters -> Search -> Buscar coincidencia exacta -> Si

Shop Parameters -> Search -> Longitud mínima palabra -> 1

Estos tres parámetros anteriores se pueden modificar en función de la tienda.

Código

Vamos a classes/search.php y en la función find añadimos la siguiente modificación:

$intersect_array = array();
$score_array = array();
$words = explode(‘ ‘, Search::sanitize($expr, $id_lang, false, $context->language->iso_code));

// rene
$words_rene = Search::sanitize($expr, $id_lang, false, $context->language->iso_code);
$busqueda = str_replace(‘ ‘, ‘%’, $words_rene);
// echo “<br>->”.$busqueda;
$sql = “select DISTINCTROW id_product from ps_product_lang where id_shop=’1′ and (name like ‘%”.$busqueda.”%’ or description like ‘%”.$busqueda.”%’)”;
// echo “<br>->”.$sql;
$intersect_array[] = ‘select DISTINCTROW id_product from ps_product_lang where id_shop=1 and (name like \’%’.$busqueda.’%\’ or description like \’%’.$busqueda.’%\’)’;
// fin rene

foreach ($words as $key => $word) {
if (!empty($word) && strlen($word) >= (int)Configuration::get(‘PS_SEARCH_MINWORDLEN’))
{
$word = str_replace(‘%’, ‘\\%’, $word);
$word = str_replace(‘_’, ‘\\_’, $word);
$start_search = Configuration::get(‘PS_SEARCH_START’) ? ‘%’: ”;
$end_search = Configuration::get(‘PS_SEARCH_END’) ? ”: ‘%’;
/* Quitado por Rene
$intersect_array[] = ‘SELECT si.id_product
FROM ‘._DB_PREFIX_.’search_word sw
LEFT JOIN ‘._DB_PREFIX_.’search_index si ON sw.id_word = si.id_word
WHERE sw.id_lang = ‘.(int)$id_lang.’
AND sw.id_shop = ‘.$context->shop->id.’
AND sw.word LIKE
‘.($word[0] == ‘-‘
? ‘ \’%’.$start_search.pSQL(Tools::substr($word, 1, PS_SEARCH_MAX_WORD_LENGTH)).$end_search.’\”
: ‘ \’%’.$start_search.pSQL(Tools::substr($word, 0, PS_SEARCH_MAX_WORD_LENGTH)).$end_search.’\”
);
*/

if ($word[0] != ‘-‘)
{
$score_array[] = ‘sw.word LIKE \”.$start_search.pSQL(Tools::substr($word, 0, PS_SEARCH_MAX_WORD_LENGTH)).$end_search.’\”;

}
}
else
unset($words[$key]);
}

Sé el primero en comentar

Dejar una contestacion

Tu dirección de correo electrónico no será publicada.


*