OK У меня есть база данных mySQL, которая выглядит примерно так:
ID – int и уникальный идентификатор записанного
Название – название объекта
Описание – Описание предметов
Я хочу искать название и описание ключевых слов, в настоящее время я использую.
SELECT * From 'item', где заголовок LIKE% key%
И это работает, и так как в базе данных мало, так как поиск «этого ключа» не находит «этот ключ», я хочу улучшить поисковую систему сайта и даже добавить некоторую систему ранжирования (но это уже давно).
Итак, на вопрос, я слышал о чем-то под названием «Полнотекстовый поиск», это (насколько я могу судить), основной продукт дизайна базы данных, но, будучи Newby на эту тему, я ничего об этом не знаю …
1) Считаете ли вы, что это было бы полезно?
И дополнительный квестрон …
2) Что я могу прочитать о дизайне базы данных / поисковом дизайне, который укажет мне в правильном направлении.
Если это актуально, сайт в настоящее время написан в stright PHP (IE без рамки) (мысль о преобразовании его в Ruby on Rails перешла мне на ум)
Обновить
Спасибо всем, я пойду на поиск по всему тексту. И для любого, кто нашел это позже, я нашел хороший учебник по полнотекстовому поиску.
Проблема с поиском типа «% keyword%» заключается в том, что нет возможности эффективно искать его в обычной таблице, даже если вы создаете индекс в этом столбце. Подумайте, как бы вы выглядели в телефонной книге. На самом деле нет способа его оптимизировать – вам нужно отсканировать всю телефонную книгу – и это то, что делает MySQL, полное сканирование таблицы.
Если вы измените этот поиск на «ключевое слово%» и используете индекс, вы можете очень быстро выполнить поиск. Похоже, это не то, что вы хотите.
Поэтому, имея в виду, я использовал полнотекстовое индексирование / поиск совсем немного, и вот несколько плюсов и минусов:
Pros
Cons
Вот неплохая документация по полнотекстовому поиску .
Другой вариант – использовать поисковую систему, такую как Sphinx . Это может быть очень быстро и гибко. Он оптимизирован для поиска и интеграции с MySQL.
Я бы предположил, что полный текст MySQL достаточен для ваших нужд, но стоит отметить, что встроенная поддержка не очень хорошо масштабируется. Для документов среднего размера он начинает становиться непригодным для размеров таблиц размером в несколько сотен тысяч строк. Если вы считаете, что это может стать проблемой, вы, вероятно, должны уже заглянуть в Сфинкс. Это становится стандартом defacto для MYSQL-пользователей, хотя я лично предпочитаю реализовать свое собственное решение с помощью java lucene. 🙂
Кроме того, я хотел бы упомянуть, что полнотекстовый поиск принципиально отличается от стандартного LIKE '% keyword%' – search. В отличие от индексации полного текста LIKE-поиска, вы можете искать несколько ключевых слов, которые не должны появляться рядом друг с другом. Например, стандартные поисковые системы, такие как google, являются полнотекстовыми поисковыми системами.
Вы также можете рассмотреть Zend_Lucene. Это немного легче интегрировать, чем Sphinx, потому что это чистый PHP.