Bakti9rov
!*|=?
Поисковый движок
Приветствую.
Недавно занялся написанием поискового движка для новостной ленты. Новостная лента есть древовидный раздел на сайте (модуль к системе управления сайтом), с категориями и проч. Обновляется примерно по 2-3 записи/день. Есть архивация, выделение важных новостей, поиск по дате. Задача - сделать поиск по ключевым словам.
Сначала была мысль создать индексатор новостной ленты - так и сделал. Тексты, заголовки новостей я проиндексировал - получилась таблица, в которой записаны все слова, встречающиеся в новостях (предварительно происходит отсев по длине). Но ждал сюрприз - размер всей базы увеличился в 1,3 раза.
Перспектива того, что в таблице с проиндесированными словами будет по миллиону записей, вынудила искать другие решения.
Поэтому не стал париться и все сделал по релевантности... через match...against.
На сайте есть форма, которая отсылает ключевые слова, фильтры, сортировочные флажки (использую битовые маски) - движок ищет, регистрирует результаты поиска и совпадения, а далее редиректит на search/какие_то_ключевые_слова/. Там уже идет отборка из совпадений. Есть ограничения на флуд (частое использование поиска с одной сессии) и длину слов.
Хотелось бы узнать, правильное ли направление выбрано вообще ? Не сдохнет ли мой движок с тем, как новостная лента разрастется в нечто огромное? Кто как решал подобные задачи?
ЗЫ. Вот структура некоторых таблиц:
таблица matches:
id/session_id/search_id(=md5($keywords))/keywords/mask/filter/time/count/microtimer
таблица matches:
id/result/relev
таблица news: FULLTEXT-поля caption/title/text.
Приветствую.
Недавно занялся написанием поискового движка для новостной ленты. Новостная лента есть древовидный раздел на сайте (модуль к системе управления сайтом), с категориями и проч. Обновляется примерно по 2-3 записи/день. Есть архивация, выделение важных новостей, поиск по дате. Задача - сделать поиск по ключевым словам.
Сначала была мысль создать индексатор новостной ленты - так и сделал. Тексты, заголовки новостей я проиндексировал - получилась таблица, в которой записаны все слова, встречающиеся в новостях (предварительно происходит отсев по длине). Но ждал сюрприз - размер всей базы увеличился в 1,3 раза.

Поэтому не стал париться и все сделал по релевантности... через match...against.
На сайте есть форма, которая отсылает ключевые слова, фильтры, сортировочные флажки (использую битовые маски) - движок ищет, регистрирует результаты поиска и совпадения, а далее редиректит на search/какие_то_ключевые_слова/. Там уже идет отборка из совпадений. Есть ограничения на флуд (частое использование поиска с одной сессии) и длину слов.
Хотелось бы узнать, правильное ли направление выбрано вообще ? Не сдохнет ли мой движок с тем, как новостная лента разрастется в нечто огромное? Кто как решал подобные задачи?

ЗЫ. Вот структура некоторых таблиц:
таблица matches:
id/session_id/search_id(=md5($keywords))/keywords/mask/filter/time/count/microtimer
таблица matches:
id/result/relev
таблица news: FULLTEXT-поля caption/title/text.