Параметры текстового поиска MySQL InnoDB - PullRequest
3 голосов
/ 29 октября 2010

Хорошо зная, что мои таблицы InnoDB не поддерживают поиск FULLTEXT, мне интересно, каковы мои альтернативы для поиска текста в таблицах? Является ли производительность , которая плохой при использовании LIKE?

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

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

Мысли?

Ответы [ 3 ]

3 голосов
/ 29 октября 2010

Если вы хотите сделать это правильно , вы, вероятно, должны с самого начала использовать Люцен или Сфинкс .

  1. это позволит вам сохранить структуру таблицы.
  2. у вас будет огромный прирост производительности (подумайте заранее)
  3. вы получите доступ к aмножество необычных функций поиска

И Lucene, и Sphinx удивительно хорошо масштабируются (Lucene поддерживает Wikipedia и Digg / Sphinx, Slashdot)

1 голос
/ 29 октября 2010

Использование LIKE позволяет использовать индекс только в том случае, если нет начального%.Выполнение LIKE '% foo%' на большой таблице будет огромным ударом по производительности.На вашем месте я бы изучил использование sphinx .У него есть возможность построить свой индекс, убирая данные из MySQL, используя ваш запрос.Это довольно просто и было разработано, чтобы решить вашу конкретную проблему.

Есть также solr, который является http-оберткой вокруг люцена, но я считаю, что сфинкс немного более прост.

0 голосов
/ 29 октября 2010

Я, как и другие, призываю использовать Lucene, Sphinx или Solr.

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

Эта ссылка предназначена для Symfony / PHP, но вы можете применить эти концепции к любому языку и структуре приложения, предполагая, что имеется реализация алгоритма стемминга.Однако, если вы не используете шаблон доступа к данным, где вы можете подключиться к обновлению индекса при обновлении записи, это не так легко выполнимо.Чтобы проиндексировать несколько таблиц, вы должны либо эмулировать ссылочную целостность в вашем DAL, либо добавить столбец fk для каждой отдельной таблицы, которую вы хотите проиндексировать.Я не уверен, что вы пытаетесь сделать, чтобы полностью исключить это.

...