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

Здравствуйте, уважаемые специалисты!

Возникла необходимость реализовать поиск по базе документов размером от 100 до 150 гигабайт. Среди документов встречаются форматы: текст, HTML, PDF, OpenOffice, OpenDocument, Microsoft Word/Excel, RTF.

Поиск будут осуществлять около 300 человек постоянно подключенных к базе, люди находятся в разных городах России.

Тексты на русском языке.

Что посоветуете?

1. Какие системы для реализации такого поиска существуют?
2. Возможно ли проиндексировать такой объём информации?
3. Долго ли будет осуществляться поиск по такой базе данных?
4. Какой мощности сервер необходимо выделить для решения такой задачи?
5. Где лучше хранить индексы?
6. Возможно ли получить доступ к поисковому движку через PHP?
7. Сроки реализации задачи?

Заранее спасибо за помощь!
  • Вопрос задан
  • 7625 просмотров
Пригласить эксперта
Ответы на вопрос 5
vollossy
@vollossy
Веб-разработчик с небольшим опытом работы
А вы не смотрели в сторону Sphinx или, например Zend Lucene. Это первое, что пришло в голову. Хотя, честно говоря, не уверен, насколько они подходят для конкретной задачи.
Ответ написан
MpaK999
@MpaK999
Буду!
Solr умеет очень хорошо индексировать документы — lucene.apache.org/solr/ надо немного с русским языком будет подшаманить.
Не скажу за PHP адаптер (но он должен быть), есть REST API, так что всё легко.
Ответ написан
sajgak
@sajgak
Вместо Solr советую использовать ElasticSearch. Оба они пострены на Lucene, но в эластике намного лучше обстоят дела со скоростью добавления, изменения документов в индексе + шардинг из коробки. Работал с обоими системами, даже субъективно у эластика более user-friendly язык запросов
Ответ написан
dali
@dali
Если говорить про Sphinx, то ему в качестве источника данных нужна БД (чтобы он с помощью sql вытащил данные) или xml (xml-pipes). То есть перед тем, как настраивать сфинкс, вам надо будет все ваши документы или записать в БД, или переконвертировать в xml. Тут можно несколько вариантов решения придумать, смотря что вам надо. Предположим, вам не нужен полнотекстовый поиск по документам, вы можете каждому документу назначить ключевые слова, тогда в xml вы можете записать ключевые слова и название документа, поиск осуществляется по ключевым словам, выдается документ. Ну или полностью вытаскивать текст из документов, ложить в БД (придумав структуру перед этим), осуществлять полнотекстовый поиск.
Про объемы: 100-150 ГБ это конечно много, хотя возможно, когда вы вытащите текст из документов, объем подсократится, но не факт. Но учтите, что Sphinx строит индексы, а они займут минимум раза в три больше места. Поэтому диска нужно будет минимум террабайт и по возможности побыстрее.
По железу: у меня есть поиск по 1ГБ таблице спокойно(и очень шустро) работает на 512 метрах оперативы на 1 ядре на хостинге под дебианом 5.5. Индексер можно ограничить потребление памяти, тогда он будет индексировать медленней. Но можно настроить, чтобы индексировал только то, что надо.

А способов реализации много, но все зависит от того, что вам надо на выходе получить, как искать и что.
Ответ написан
@cat_crash
Возможно панацея — company.yandex.ru/technologies/server/
Sphinx — не умеет нидексировать файлы.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы