Полнотекстовый поиск ответа?

OK У меня есть база данных mySQL, которая выглядит примерно так:

ID – int и уникальный идентификатор записанного

Название – название объекта

Описание – Описание предметов

Я хочу искать название и описание ключевых слов, в настоящее время я использую.

SELECT * From 'item', где заголовок LIKE% key%

И это работает, и так как в базе данных мало, так как поиск «этого ключа» не находит «этот ключ», я хочу улучшить поисковую систему сайта и даже добавить некоторую систему ранжирования (но это уже давно).

Итак, на вопрос, я слышал о чем-то под названием «Полнотекстовый поиск», это (насколько я могу судить), основной продукт дизайна базы данных, но, будучи Newby на эту тему, я ничего об этом не знаю …

1) Считаете ли вы, что это было бы полезно?

И дополнительный квестрон …

2) Что я могу прочитать о дизайне базы данных / поисковом дизайне, который укажет мне в правильном направлении.

Если это актуально, сайт в настоящее время написан в stright PHP (IE без рамки) (мысль о преобразовании его в Ruby on Rails перешла мне на ум)

Обновить

Спасибо всем, я пойду на поиск по всему тексту. И для любого, кто нашел это позже, я нашел хороший учебник по полнотекстовому поиску.

Проблема с поиском типа «% keyword%» заключается в том, что нет возможности эффективно искать его в обычной таблице, даже если вы создаете индекс в этом столбце. Подумайте, как бы вы выглядели в телефонной книге. На самом деле нет способа его оптимизировать – вам нужно отсканировать всю телефонную книгу – и это то, что делает MySQL, полное сканирование таблицы.

Если вы измените этот поиск на «ключевое слово%» и используете индекс, вы можете очень быстро выполнить поиск. Похоже, это не то, что вы хотите.

Поэтому, имея в виду, я использовал полнотекстовое индексирование / поиск совсем немного, и вот несколько плюсов и минусов:

Pros

  • Очень быстро
  • Возвращает результаты, отсортированные по релевантности (по умолчанию, хотя вы можете использовать любую сортировку)
  • Можно использовать стоп-слова.

Cons

  • Работает только с таблицами MyISAM
  • Слова, которые слишком коротки, игнорируются (минимум по умолчанию – 4 буквы)
  • Требуется другое предложение SQL в where, поэтому вам нужно будет изменить существующие запросы.
  • Не соответствует частичным строкам (например, «слово» не соответствует «ключевому слову», только «слово»)

Вот неплохая документация по полнотекстовому поиску .

Другой вариант – использовать поисковую систему, такую ​​как Sphinx . Это может быть очень быстро и гибко. Он оптимизирован для поиска и интеграции с MySQL.

Я бы предположил, что полный текст MySQL достаточен для ваших нужд, но стоит отметить, что встроенная поддержка не очень хорошо масштабируется. Для документов среднего размера он начинает становиться непригодным для размеров таблиц размером в несколько сотен тысяч строк. Если вы считаете, что это может стать проблемой, вы, вероятно, должны уже заглянуть в Сфинкс. Это становится стандартом defacto для MYSQL-пользователей, хотя я лично предпочитаю реализовать свое собственное решение с помощью java lucene. 🙂

Кроме того, я хотел бы упомянуть, что полнотекстовый поиск принципиально отличается от стандартного LIKE '% keyword%' – search. В отличие от индексации полного текста LIKE-поиска, вы можете искать несколько ключевых слов, которые не должны появляться рядом друг с другом. Например, стандартные поисковые системы, такие как google, являются полнотекстовыми поисковыми системами.

Вы также можете рассмотреть Zend_Lucene. Это немного легче интегрировать, чем Sphinx, потому что это чистый PHP.