Симптомы. Ищутся не все товары в быстром поиск (быстрый поиск это форма поиска расположенная на всех страницах, расширенный поиск — поиск через отдельную страницу).

В Magento эти два поиска работают принципиально по разному (и ищут в разных местах).
1. Расширенный поиск. Ищет по всем полям товара, возможно настраивать отдельные свойства, например, выбрать все товары определенного производителя с определенным размером и т.д.

2. Быстрый поиск. Суть работы — все текстовые поля товаров при сохранении склеиваются в большую строку и складываются в таблицу catalogsearch_fulltext, где хранится:
product_id — id товара;
store_id — id магазина которому принадлежит товар;
data_index — склеенная строка в таком виде «ECT101|Экспедиция|Включено|Нет|Компас походный|пластик|картонная коробка|Надежный и долговечный компас в прочном закрытом корпусе станет Вашим хорошим помощником в походах и экспедициях.|79|1».
Поиск производится путем простого запроса вида

SELECT * FROM `catalogsearch_fulltext` WHERE `data_index` LIKE ‘%то что мы ищем%’

Данные о товаре catalogsearch_fulltext обновляются при сохранении товара или при обновлении индексов.

Проблема. В строку добавляются не все данные о товаре. У меня экспериментальным путем выяснилось, что в таблицу не попадают символы после русской буквы «К». т.е. если где-то в текстовом поле (например описании) встречалась буква «К», весь текст, который шел после неё, игнорировался.

Причина проблемы. preg_replace — функция не совсем корректно работает с русскими буквами, если явно не указать что строка в UTF8.

Решение. В файле \app\code\core\Mage\CatalogSearch\Model\Mysql4\Fulltext.php найти строку

return preg_replace(«#\s+#si», ‘ ‘, trim(strip_tags($value))); у меня это строка под номером 654

и заменить на

return preg_replace(«#\s+#siu», ‘ ‘, trim(strip_tags($value)));  (дописать букву u в конце регулярного выражения).

После этого необходимо обновить все индексы.

Спасибо за внимание, в моем случае это полностью решило проблему с поиском.