Mysql LIKE или FULLTEXT поиск - какой из них будет использоваться здесь? - PullRequest
1 голос
/ 24 ноября 2011

Я работаю над сайтом на основе php-mysql, предназначенным в основном для поиска.Ранее я использовал оператор LIKE во всех моих запросах.Но мой sql становится слишком большим и сложным, так как может быть несколько ключевых слов для поиска в списке полей.Я обнаружил, что поиск FULLTEXT не только повышает производительность, но и запрос становится более читабельным.Но для поиска FULLTEXT у меня есть следующие проблемы:

  1. Возможно, мне придется использовать дикие символы, по крайней мере в конце, например.

$ sql = mysql_query(«ВЫБРАТЬ * ИЗ таблицы ГДЕ МАТЧ (поле1, поле2, поле3, поле4) ПРОТИВ ('+ val1 * + val2 * + val3 *');»);

вместо

$ sql = mysql_query ("SELECT * FROM table WHERE (filed1 LIKE"% val1% "ИЛИ filed2 LIKE"% val1% "ИЛИ filed3 LIKE"% val1% "ИЛИ filed4 LIKE"% val1% ") И(filed1 LIKE "% val2%" ИЛИ filed2 LIKE "% val2%" ИЛИ filed3 LIKE "% val2%" ИЛИ filed4 LIKE "% val2%") И (filed1 LIKE "% val3%" ИЛИ filed2 LIKE "% val3%"ИЛИ filed3 LIKE '% val3%' ИЛИ ​​filed4 LIKE '% val3%') ");

Действительно ли предыдущий запрос улучшит мою производительность по сравнению со вторым?

2.Для расширенного поиска пользовательские входные данные могут быть ключевыми словами, которые соответствуют результату, или ключевыми словами, которые не соответствуют результату.Таким образом, мой sql выглядит следующим образом:

$ sql = mysql_query ("SELECT * FROM table WHERE (filed1 LIKE"% val1% "ИЛИ filed2 LIKE"% val1% "ИЛИ filed3 LIKE"% val1 "% 'ИЛИ filed4 LIKE'% val1% ') И (filed1 LIKE'% val2% 'ИЛИ filed2 LIKE'% val2% 'ИЛИ filed3 LIKE'% val2% 'ИЛИ filed4 LIKE'% val2% ') И (filed1 LIKE'% val3% 'ИЛИ filed2 LIKE'% val3% 'ИЛИ filed3 LIKE'% val3% 'ИЛИ filed4 LIKE'% val3% ') ") AND (filed1 NOT LIKE'% val1% 'ИЛИ filed2 НЕ LIKE'% val1% 'ИЛИ filed3 НЕ НРАВИТСЯ «% val1%» ИЛИ filed4 НЕ НРАВИТСЯ «% val1%») И (filed1 НЕ НРАВИТСЯ «% val2%» ИЛИ filed2 НЕ НРАВИТСЯ «% val2%» ИЛИ filed3 НЕ НРАВИТСЯ «% val2%» ИЛИ filed4 НЕНРАВИТСЯ '% val2%') И (filed1 НЕ НРАВИТСЯ '% val3%' ИЛИ ​​filed2 НЕ НРАВИТСЯ '% val3%' ИЛИ ​​filed3 НЕ НРАВИТСЯ '% val3%' ИЛИ ​​filed4 НЕ НРАВИТСЯ '% val3%') ");

Это не тихо читается, и я чувствую, что это замедлит производительность поиска. Но я не уверен , можно ли это сделать с помощью поиска FULLTEXT . Если да, то что будетзапрос?

и наконецу, мой вопрос я должен придерживаться WHERE / LIKE для поиска или перейти на поиск FULLTEXT?

PS Моя база данных небольшая, всего 1000 строк и 10 полей.

1 Ответ

0 голосов
/ 24 ноября 2011

Для расширенного текстового поиска ответ таков: ни один из них не является оптимальным.Вместо этого вам следует использовать специальную поисковую систему для поиска текста, например Lucene и SolR .

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...