Задавайте вопросы, мы ответим
Вы не зашли.
Страниц: 1
Исходные, упрощенные, данные:
stat - таблица с небольшими статьями. Поля id, text. Статей - около 100тыс.
Нужно организовать поиск в этих статьях по определенной фразе.
Сделал, в начале, так:
word - таблица со всеми словами, встречающимися в статьях. Поля id, word
index - главная таблица для поиска, в которую записывается, в какой статье, какое слово есть. Поля: word_id, stat_id
Поиск происходит так: запрос разделяется на слова, по каждому слову получаем его id (из word), в index получаем список stat_id, которым соответствуют все word_id.
Все работало неплохо, пока количество статей не стало приближаться к сотне тысяч, таблица index, при этом, выросла примерно до 3млн. записей.
По одному слову ищется достаточно быстро, по двум - уже 10-20сек, по трем - до 30-40сек. Хочется ускорить.
Задумка, на счет которой хочу спросить совета, в следующем.
Вместо большой таблицы index создать отдельные таблицы на каждое слово: w1, w2 ... w50000 ... с одним лишь полем: stat_id
И устроить поиск так: разбивать запрос на слова, по таблице word определять их id, и дальше работать только с несколькими небольшими таблицами, в которых будет, максимум, 10000 записей, а в среднем, 500-1000. Дальше нахожу совпадающие во всех отобранных таблицах stat_id - и все.
Вопросы:
1. Не замедлит ли базу наличие в ней около 50-70 тыс. таблиц?
2. Достаточно ли быстро из такого числа таблиц движок выдергивает нужные?
3. Ускорит ли это поиск?
4. Может у кого есть другие способы решения данного вопроса?
Заранее благодарен за ответы и идеи!
Отредактированно Ilim (28.05.2009 12:30:44)
Неактивен
Ух, какая красота
А какие запросы и какие ключики на таблицах? Кажется, что у Вас еще не очень большая база.
P.S. Обычно для поиска по тексту используют специальный полнотекстовый индекс. Он умеет
быстро искать слова целиком, и делает многое другое, например, выкидывает стопслова (ведь
наверняка Вы не выкидываете слова типа «и» и «или»?).
Неактивен
Думаю, Вам не помешает посмотреть в сторону http://sphinxsearch.com/ - считается одним из лучших open-source решений для всяческих задач по индексации текста. По скорости работы для специфических задач превосходит MySQL на несколько порядков.
Неактивен
paulus написал:
Ух, какая красота
А какие запросы и какие ключики на таблицах? Кажется, что у Вас еще не очень большая база.
P.S. Обычно для поиска по тексту используют специальный полнотекстовый индекс. Он умеет
быстро искать слова целиком, и делает многое другое, например, выкидывает стопслова (ведь
наверняка Вы не выкидываете слова типа «и» и «или»?).
Я тут специально все привел в упрощенном виде. На самом деле и слова, не несущие смысловой нагрузки, выкидываю и, в добавок, привожу все слова в исходные формы. И в результатах поиска выделяю слова, по которым найдена информация.
Будет ли полнотекстовый поиск быстрее? Или нужно экспериментировать? Статьи небольшие, это даже не статьи, а этикетки к ним, в пределах 1000 знаков.
На сегодня уже почти 100тыс. статей. И 3млн. записей в таблице соответствия слов статьям.
Про запрос я писал зимой тут: http://sqlinfo.ru/forum/viewtopic.php?id=1158 - такого плана запрос и стоит пока.
LazY написал:
Думаю, Вам не помешает посмотреть в сторону http://sphinxsearch.com/ - считается одним из лучших open-source решений для всяческих задач по индексации текста. По скорости работы для специфических задач превосходит MySQL на несколько порядков.
Пасиб за ссылку - почитаю.
Отредактированно Ilim (29.05.2009 09:19:46)
Неактивен
Страниц: 1