Opencart - поиск независимо от акцента

Уже много раз было написано, что базовый поиск Opencart недостаточно хорош. Ну, я столкнулся с этой проблемой:

Когда клиент ищет продукт в моей стране (Словакия (UTF8)), он, вероятно, не будет использовать диакритические знаки. Таким образом, он записывает "cucoriedka" и ничего не нашел.

Но в базе есть продукт с названием "čučoriedka", и я хочу, чтобы он тоже отображался, так как он искал.

У вас есть идея, как получить эту работу? Простой, тем лучше!

Ответ 1

Я не знаю словацкий, извините. Но словацкая сортировка utf8_slovak_ci относится к словацкой букве č в отличие от c. (Должны ли фамилии, начинающиеся с Č, начинаться с C в ваших телефонных каталогах? Вероятно, они делают. Создатели MySQL, безусловно, думают, что они это делают.)

Сортировка utf8_general_ci рассматривает č и c то же самое. Здесь скрипка sql демонстрирует все это. http://sqlfiddle.com/#!9/46c0e/1/0

Если вы измените сортировку столбца, содержащего ваше имя продукта, на utf8_general_ci, вы получите более удобную для поиска таблицу. Предположим, что ваша таблица называется product, а столбец с именем в ней называется product_name. Затем этот оператор определения данных SQL преобразует столбец по мере необходимости. Вы должны посмотреть фактический тип данных столбца, а не использовать varchar(nnn), как я сделал в этом примере.

 alter table product modify product_name varchar(nnn) collate utf8_general_ci

Если вы не можете изменить таблицу, вы можете изменить предложение WHERE, чтобы работать так, указав явно сопоставление.

WHERE 'userInput' COLLATE utf8_general_ci = product_name

Но это будет медленнее искать, чем изменение сортировки столбцов.

Ответ 2

Вы можете использовать функцию SOUNDEX() или SOUNDS LIKE для MySQL.

Эти функции сравнивают фонетику.

Точность soundex сомнительна, кроме английского. Но его можно улучшить, если мы используем его как

select soundex('ball')=soundex('boll') from dual

SOUNDS LIKE.

Использование комбинации как SOUNDEX(), так и SOUNDS LIKE улучшит точность.

Пожалуйста, обратитесь к документации по MySQL за подробной информацией или mysql-sounds-like-and-soundex