MySQL запросы и текстовый поиск - PullRequest
1 голос
/ 26 февраля 2010

У меня есть этот запрос:

select name, body
  from news
 where body like %MyWord%;

Я использую движок базы данных MySQL. этот запрос вернет имя, тело, когда найден MyWord в тексте тела.

Моя проблема здесь в том, что, когда я ищу два слова в тексте, например, MyWord1, MyWord2. или больше !!!

Как я могу это сделать, если вы знаете, что этот запрос вызывается по функции (что я не могу изменить этот запрос все время).

Ответы [ 3 ]

1 голос
/ 26 февраля 2010

Если вам нужно больше функциональности в шаблонах текстового поиска, вы должны использовать FULL-TEXT-SEARCH в MySQL с соответствующими индексами.

Вы сможете искать два или более слов одновременно, если это то, что вам нужно.

0 голосов
/ 26 февраля 2010

если вы хотите найти два разных слова, вы можете сделать это:

select name, body
  from news
 where body like %MyWord1% and body like %MyWord2%;

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

  • с использованием полнотекстового поиска, как предложено Пабло Санта-Крус (вероятно, самый простой в использовании)
  • парсинг вашего тела в подтаблицу через триггер при вставке
  • поиск данных путем заполнения индекса lucene / solr и поиска по нему (немного сложнее в настройке и обслуживании, но производительность впечатляет.
0 голосов
/ 26 февраля 2010

Вы можете использовать какую-нибудь злую SQL-инъекцию (вроде):)

Я предполагаю, что вы передаете «MyWord» функции, содержащей запрос, который вы не можете («не можете» или «не любите» менять) Что произойдет, если «MyWord» будет выглядеть примерно так:

MyWord1% OR body like %MyWord2

Зло, я знаю, вы были предупреждены;)

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