Оптимизация поиска на MySQL

Andrey-X

Guest
Оптимизация поиска на MySQL

Уважаемые, нужна ваша помосчь...
Задача:
1)написать поиск по сайту по фразе целиком и по каждому из слов
2)остортировать и вывести первыми группу в которой была найдена фраза целиком, а потом уже остортированную группу в которой совпадения частичны (т.е. 2 отдельных группы, каждая со своей сортировкой)
Предпринято:
1)создан запрос вида (фраза предварительно бьется на слова):
select id, YEAR(ddate) as yy, MONTH(ddate) as mm, DAYOFMONTH(ddate) as dd, zagolovok, telo from doctable where zagolovok like '%поиск%' or telo like '%поиск%' or zagolovok like '%сайт%' or telo like '%сайт%'
2)полученнЫй массив обрабатывает в ПХП и разчленяется на 2 массива с полным совпадением и частичным. к ним применяется сортировка
3)к массивам применяются фильтры по показу (за какое число, месяц и т.п.) + производится поиск контекста (для подсветки)
4)все это добро записывается в сессию и начинается постраничный вывод

Проблемы/Перспективы:
1) запрос дико тормозит систему (загрузка проца сервака под 99%), причем при прямом запросе (т.е. без поиска по отдельному слову - все летает).Также тормоза не по сортировке и записи/считыванию массива в пхп, а именно по поиску... и если учесть что фраза будет скажем из 4,5 слов, то становится страшно...
2) возможно сессия не лучшее место для хранения таких данных, и было б интересней кинуть все это во врем. таблицу, создаваюемую по сессии, но пугают некоторые вещи:
- возможно увеличится время выборки, т.к. сначала придется портировать данные во врем таблицу, а потом изнова из нее считывать
- не понятно каким чертом можно разграничить данные с частичным совпадением и полным по фразе (не делать же 2 отдельных скл запроса? или сортировать массив в пхп а потом вливать Insert-ом в таблицу)

Вопросы:
1) как можно пооптимизировать сей запрос? есть методы и насколько сие поможет?
2) как поступить с временной таблицей? насколько я понимаю, создав п-коннект с базой и прилипив оную она будет существовать до закрытия броузера (на всех стадиях крутится 1 скрип, который вызывает сам себя с параметрами для перелистывания страниц)
 

440hz

php.ru
Автор оригинала: Necromant
курить для начала http://www.php.net/manual/ru/ref.mnogosearch.php
лично юзал MNOGO. Довольно шустрая и умная система. Пришлось повозится с прикруткой, но после вдумчивого чтения мануалов все завелось (FreeBSD версия).

так же получилось индексировать не только HTML, но и DOC, XLS и PDF документы, расположенный на сайте и на локальных серверах.

удобно что поддерживает склонения слов (не помню как это называется грамотно), т.е. вводишь "дерево", он ищет (дерево, деревьев и т.д.)

у них хорошая тех.поддержка. отвечают быстро.
 

Andrey-X

Guest
братцы, а как быть с сохранением результатов?
сессии или вр. таблицы? беда ж в том что еще идет поиск по контексту сайта. массив удобно - все загнал, сортирнул и баста.
 

Necromant

Новичок
Так если ты знаешь как делать , вперед , нафиг задвать , вопрос , если ты сам знаешь ответ.
Свой велосипед , ближе к телу.
 

Andrey-X

Guest
дык вопрос то был по скорости, вот и пытаю что есть оптимум. свое - как вариант, но истина дороже :)
Благодарю за суппорт!
 
Сверху