2013-05-23 5 views
1

Я понимаю, что звездочка является подстановочным знаком, который может быть добавлен в конец слова полного текста, но что, если искомое ключевое слово является суффиксом? Например, я хочу иметь возможность искать «ames» и иметь результат, который содержит имя «james». Вот мой текущий запрос, который не работает, потому что вы не можете добавлять звездочки к полнотекстовому поиску.Предоставление * (звездочка) для полнотекстового поиска в MySQL

SELECT * FROM table WHERE MATCH(name, about, address) AGAINST ("*$key*" IN BOOLEAN MODE) 

Я бы просто переключился на использование LIKE, но это было бы слишком медленно для размера моей базы данных.

ответ

2

Что вы можете сделать, это создать другой столбец в базе данных с индексом полнотекстового поиска, этот новый столбец должен иметь обратную строку столбца, который вы пытаетесь найти, и вы отмените поисковый запрос и используете его искать на обращенном колонки, вот как запрос будет выглядеть следующим образом:

SELECT * FROM table WHERE MATCH(column1) AGAINST ("$key*" IN BOOLEAN MODE) OR MATCH(reversedColumn1) AGAINST ("$reveresedkey*" IN BOOLEAN MODE) 
  • первое условие MATCH(column1) AGAINST ("$key*" IN BOOLEAN MODE) пример: reversedColumn1==>Jmaes$reveresedkey*==>ames* будет искать слова, которые начинаются с тез ==> нет матча

  • условие секунд MATCH(reversedColumn1) AGAINST ("$reveresedkey*" IN BOOLEAN MODE) пример: reversedColumn1==>semaJ$reveresedkey*==>sema* будет искать слова, которые заканчиваются Эймс ==> у нас есть матч

Это не может быть плохая идея, если ваш текст короткий:

+0

Умное решение! – Colin

4

Не может быть сделано из-за ограничений MySQL. Значения индексируются слева направо, а не справа налево. Вам нужно будет придерживаться LIKE, если вы хотите, чтобы подстановочные знаки добавлялись к строке поиска.

Смежные вопросы