Здравствуйте.
Для начала, я хотел бы кратко описать принцип работы поисковой системы.
1. Имеется некий запрос.
2. Запрос подвергается процедуре стемминга.
3. В индексе системы ищутся документы, которые содержат слова из запроса.
4. Документы упорядочиваются относительно частоты слов, их первой точки вхождения и на основании коэффициента корреляции Пирсона, цитируемости другими элементами индекса, а так же «выбираемостью» в качестве результата поиска пользователем (это происходит за счёт нейронной сети с обратным распространением).
Но хранить огромные индексы в одной СУБД — убийство таковой по скорости. Каким образом можно сформировать возможность горизонтального масштабирования для хранения индексов, чтобы не сильно проиграть в скорости работы?
А так же, как можно реализовать механизм пагинации? Можно, конечно, запоминать последний индекс, но сеть его не принимает во внимание, используя полнотекстовый поиск по всем индексам. Да и при таком подходе места для хранения не напасёшься. Создавать отдельную группу кластеров с хранением индексов и запущенным многопоточным серверов для поиска, а после объединения результатов? Но ранжируется в процессе поиска.
В общем, хотелось бы услышать совет профессионалов.