MySQL: лучший способ поиска по содержимому файлов (полнотекстовый поиск) - PullRequest
1 голос
/ 09 февраля 2011

В настоящее время я занимаюсь разработкой веб-сайта, который позволяет пользователям загружать презентации, документы и электронные книги (что-то вроде scribd и slideshare), поэтому мне нужно иметь возможность поиска по содержимому файла.В настоящее время я извлекаю текст из файлов в текстовом файле.Я рассматриваю 2 варианта, поскольку я использую MySQL:

  1. Сохранение простого текста в отдельной таблице и использование полнотекстового индекса mysql для его поиска.
  2. Использование инвертированного индекса для храненияслова и поиск по ним.(2 новые таблицы - слова и многие ко многим с таблицей документов).Теперь, в этом случае, что я могу сделать, чтобы работать с повторяющимися словами, которые придают большее значение результатам.

Текст будет использоваться только для поиска.Проблема с (1) состоит в том, что текст электронной книги может быть огромным, поэтому я думаю ограничить его (например) до 50 КБ или меньше.(2) также есть проблема с большим количеством слов в электронной книге, которая, опять же, может быть ограничена.

Так что вы можете указать мне лучший способ индексировать текст и иметь возможность быстро выполнять полный текстпоиск.В этом случае мне нужно извлечь максимум пользы из mysql.

1 Ответ

0 голосов
/ 13 февраля 2011

Я решил использовать Сфинкса по предложению Роба Ди Марко. Оказывается, это самая быстрая (и с открытым исходным кодом) поисковая система FullText. У меня были некоторые проблемы с компиляцией и получением SphinxSE, чтобы не вылетать mysql, поэтому я теперь использую MariaDB, который включает плагин.

Я выбрал версию 1.10 из-за индекса RealTime. Это означает, что нет необходимости ждать, пока индексатор перестроит весь индекс, если вы просто добавите строку. (Я знаю об основных + дельта обходных решениях, но это намного проще в настройке и использовании с SphinxQL)

См. Также Некоторые вопросы, связанные с индексами SphinxSE и RT

...