1) т.е. по дефолту преста разбирает введённую фразу на слова и ищет слова только по OR (для решения достаточно поправить код запроса с OR на AND)
2) то же самое: преста перегоняет любые нелатинские символы сначала в латиницу (в латинице и хранит поисковые индексные слова) и потом уже по латинице ищет (для решения нужно найти, где именно "ё" превращается в "yo" и заменить "yo" на "e")
Кажется в этом файле эти строки решают что и как искать:
foreach ($words as $key => $word) {
if (!empty($word) && strlen($word) >= (int)Configuration::get('PS_SEARCH_MINWORDLEN')) {
$word = str_replace(array('%', '_'), array('\\%', '\\_'), $word);
$start_search = Configuration::get('PS_SEARCH_START') ? '%': '';
$end_search = Configuration::get('PS_SEARCH_END') ? '': '%';
$intersect_array[] = 'SELECT DISTINCT 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]);
}
}
?
Не пойму как изменить, чтобы добиться поиска по целой фразе.
Здесь нет никаких OR.
Или может есть модули, в которых все эти и другие проблемы уже решены и которые не слишком сложны в настройках?