2011-02-09 6 views
1

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

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

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

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

+1

Рассматривали ли вы с помощью Sphinx (http://sphinxsearch.com/about/sphinx/) ? Похоже, что это будет хорошо подходит для вашей проблемы и стека технологий. –

+0

Звучит неплохо, но у меня также есть система тегов, можно ли выполнять поиск в обоих случаях одновременно? Я имею в виду поиск в тегах и тексте и сортировку результатов на основе релевантности полного текста и существования определенного тега. Кроме того, могу ли я дать Sphinx весь текст (некоторые файлы формата txt превышают 200 КБ)? Будет ли это проблемой для Sphinx для обработки и что такое компромисс производительности в этом случае? Я имею в виду, это того стоит? – stormbreaker

ответ

0

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

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

Смотрите также Some questions related to SphinxSE and RT indexes

Смежные вопросы