Я предложу проверенный и мега простой хак, в результате которого ваш быстрый поиск превратится в машину ПКДИТЧН (Поиск-Который-Действительно-Ищет-То-Что-Нужно)!
Часто встречал мнение, что только Fulltext тип поиска может обеспечить релевантные результаты без воды, но я с этим категорически не согласен. Функционал Fulltext'a при желании можно заменить автозаполнением на Ajax. Но, так как мы хотим поиск, который может предложить товар посетителю, а не просто выполнить точное указание, то мы пойдем другим путём. Через Like.
Итак, перечень простых действий:
1. В админке идем Catalog -> Attributes -> Manage Attributes. Сортируем атрибуты "Для поиска" или Searchable и меняем это значение на Нет в тех атрибутах, которые нам не нужны. Если вы еще не создавали своих атрибутов, то можно оставить Да только в атрибутах Name и SKU. По идее, этого будет достаточно. Если у вас такой магазин, что ключевая информация о товаре идет в описании, то описание оставляем тоже. Думаю, сможете с этим разобраться.
Это действие уменьшит "воду" в результатах поиска.
2. Идем System -> Configuration -> Catalog/Catalog -> Catalog Search и устанавливаем значения как на картинке. Конечно, это не догма, но я бы посоветовал примерно так:
3. Самое сложное :) Добираемся до ../app/code/core/Mage/CatalogSearch/Model/Resource/Fulltext.php (Если вы уже сделали копию Core в Local, то, соответственно идем в локал. Если вы не делали этого, то обязательно сделайте.)
Приблизительно в районе 330 строчки находим
foreach ($words as $word) {Я выделил нужную строку. В этой строке нужно заменить OR на AND.
$like[] = $helper->getCILike('s.data_index', $word, array('position' => 'any'));
}
if ($like) {
$likeCond = '(' . join(' OR ', $like) . ')';
}
4. Идем ../app/design/frontend/default/ваш_шаблон/template/catalogsearch/form.mini.php
Если файла там нет - ищем в ../app/design/frontend/base/default/template/catalogsearch/form.mini.php и копируем куда положено.
После строки
<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">
5. Вроде бы последнее.
Возвращаемся в админку. Catalog-> Search Terms. Удаляем всё.
Затем делаем реиндекс и чистим кеш.
Ну что, посмотрим, что получилось?
Обратите внимание на порядок слов в поисковом запросе.
Еще пример:
А Fulltext в обоих случаях не выдал бы ни одного результата.
На этом всё. Надеюсь я нигде ничего не забыл и не перепустал и кому-то эта инструкция поможет.
спасибо, всё работает на magento 1.8
ReplyDeleteСпасибо камрад, метод работает на Magento CE 1.9.1.0
ReplyDelete