Помощь Помогите разобраться в многоуровневой навигации, фильтрах и поиске.

Есть OR'ы, ниже в тексте :)
Всё равно мне кажется, нужно проверить collation и кодировку БД и таблицы.
 
не

тут дело просто в том, как преста формирует запрос на выборку из БД

1) т.е. по дефолту преста разбирает введённую фразу на слова и ищет слова только по OR (для решения достаточно поправить код запроса с OR на AND)

2) то же самое: преста перегоняет любые нелатинские символы сначала в латиницу (в латинице и хранит поисковые индексные слова) и потом уже по латинице ищет (для решения нужно найти, где именно "ё" превращается в "yo" и заменить "yo" на "e")

Вывод - юзать сторонний поиск, не такой странный :)
 
Ещё 2 конкретных вопроса по родному престовскому поиску:
Сейчас, например, если в поиске задать Пугачёва, поиск ничего не найдёт, так как в названиях данных товаров прописана буква е, а не ё.

Я тут вот еще чего подумал: мне встречалась на некоторых продвинутых сайтах одна хитрая мулька. Например, набираем "Пугачов" или "Пугочефф", и оно предлагает нормальные варианты. Эластик вроде умел такие кунштюки, но уж больно он монструозен.
 
Есть OR'ы, ниже в тексте :)
Всё равно мне кажется, нужно проверить collation и кодировку БД и таблицы.

Единственный OR в этом файле в этом фрагменте:

$score = '';
if (is_array($score_array) && !empty($score_array)) {
$score = ',(
SELECT SUM(weight)
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 si.id_product = p.id_product
AND ('.implode(' OR ', $score_array).')
) position';

но эта строчка имеет отношение к выводу данных в стринги, но не собственно к поиску, если я правильно понимаю?
То есть тут замена OR на AND не поможет.

Что касается collation и кодировки БД:

upload_2018-8-7_15-22-42.png

upload_2018-8-7_15-20-46.png
 
Вывод - юзать сторонний поиск, не такой странный :)

Какой именно? Чтобы эти проблемы были решены в нём и не создавал других проблем и не был головоломным в настройках.
А местные эксперты тут неоднократно высказывались, что родной поиск неплохой и не стоит перегружать престу дополнительными модулями.
 
Я тут вот еще чего подумал: мне встречалась на некоторых продвинутых сайтах одна хитрая мулька. Например, набираем "Пугачов" или "Пугочефф", и оно предлагает нормальные варианты. Эластик вроде умел такие кунштюки, но уж больно он монструозен.
в престе по дефолту тоже такая штука есть на странице настройки поиска
там где пример "blouse" "bluose" и т.д.
но если базу данных вариантов ошибочных написаний достать и залить - боюсь, что скорость работы понизится, поэтому целесообразность под вопросом
 
Круто работает поиск! Ищем "Водка и Сталин", оно сперва ищет "vodka%", потом "stalin%" в алиасах, потом в поисковых словах, а потом запрос с LIKE "vodka%" OR LIKE "stalin%" . Отсюда делаем вывод - будет показывать всё вперемешку.
Однако, @_sashok указал верное направление - alias'ы/псевдонимы. В этом случае скорее всего поиск даже ускорится, так как обращение к этой таблице идёт в первую очередь и может сократить число дальнейших выборок. И да, вбиваешь алиас на русском, он конвертится в транслит. Но если в слове есть например мягкий знак, то в запросе будет что-то вроде того: "мальчик" превратится в "malьchik". Интересно, мускуль корректно найдёт такое слово?
 
Да, для начала хотя бы поиск по целой фразе наладить. Мне интересно, это только у меня такая проблема?
Все остальные такие грамотные и сами решили эту проблему, но подсказать конкретно где, что и как править никто не может?
 
Последнее редактирование:
Круто работает поиск! Ищем "Водка и Сталин", оно сперва ищет "vodka%", потом "stalin%" в алиасах, потом в поисковых словах, а потом запрос с LIKE "vodka%" OR LIKE "stalin%" . Отсюда делаем вывод - будет показывать всё вперемешку.
Именно так и происходит.
И что же, большинство такие магазины ведёт и не видит в этом проблемы и не решает её никак?
 
Однако, @_sashok указал верное направление - alias'ы/псевдонимы. В этом случае скорее всего поиск даже ускорится, так как обращение к этой таблице идёт в первую очередь и может сократить число дальнейших выборок. И да, вбиваешь алиас на русском, он конвертится в транслит. Но если в слове есть например мягкий знак, то в запросе будет что-то вроде того: "мальчик" превратится в "malьchik". Интересно, мускуль корректно найдёт такое слово?
Причём тут альясы в случае необходимости поиска по целой фразе?
Да и для различения между е и ё тоже это плохой помощник: где я возьму базу альясов с написанием е и ё, да и какова величина базы будет? Нет - это совсем не то.
 
Назад
Сверху