Эффективный поиск в MySQL

#mysql #search #innodb

#mysql #Поиск #innodb

Вопрос:

Я использую таблицы InnoDB, и мне нужно выполнить поиск внутри…

Допустим, у меня есть строка

  1. asda
 2. asdda
 3. xyz
  

Я хочу выполнить поиск по asda…

Это было бы что-то вроде SELECT * FROM table WHERE myC LIKE 'asda' … Что я хочу сделать, так это показать ‘asda’ и ‘asdda’, потому что это почти знакомо… Есть ли какой-либо эффективный способ сделать это? СОПОСТАВЛЕНИЕ (myC) С ‘asda’ доступно только в табличном типе MyISAM..

Спасибо за ответ!

Ответ №1:

Самой простой версией было бы использование функции SOUNDEX() в MySQL:

 SELECT *
FROM table
WHERE SOUNDEX(myC) = SOUNDEX('asda');
  

или вы можете попробовать использовать расстояние Левенштейна, что было бы немного более надежным, но в вычислительном отношении намного дороже.

Комментарии:

1. Теоретически это работает… но я пробовал ... (UPPER(CONCAT_WS(' ', a.c1, a.c2, a.c3, c.cx, l.cy )) SOUNDS LIKE '%PODSTAVEK%' ... , и он возвращает 0 строк… но при выполнении: ... (UPPER(CONCAT_WS(' ', a.c1, a.c2, a.c3, c.cx, l.cy )) LIKE '%PODSTAVEK%' ... он возвращает 12 строк… Что я могу сделать?

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

3. Нашел это! Спасибо за помощь 🙂