Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Господа помогите с запросом ., весь мозг сломал!
 
 автор: Serj0002   (22.03.2012 в 02:05)   письмо автору
 
 

Есть БД в mysql корпоративной поисковой системы. (с ней работает десктопная программа - каким образом х.з.)

в БД есть таблица - поисковый индекс (5млн строк) в индексе просто слова по порядку из каждого документа собраны

таблица index
стообцы:
word_id - слово (текст)
doc_id - номер документа
word_pos - смещение слова от начала документа (байт)

Мне нужно как то найти документы в которых встречается несколько заданных слов подряд к примеру слово1+слово2+слово3

Есть БД в mysql корпоративной поисковой системы. (с ней работает десктопная программа - каким образом х.з.)

в БД есть таблица - поисковый индекс (5млн строк) в индексе просто слова по порядку из каждого документа собраны

таблица index
стообцы:
word_id - слово (текст)
doc_id - номер документа
word_pos - смещение слова от начала документа (байт)

Мне нужно как то найти документы в которых встречается несколько заданных слов подряд к примеру слово1+слово2+слово3

Господа я уже отчаился., реально ли это сделать вообще?!
десктопная программа же как то по этому индексу ищет причем весьма шустро...

Сейчас поиск сделал просто по наличию всех слов в документе, но в результате выдает чуш!!!
важен именно порядок слов... (чтобы они были как в запросе)

десктопная софтина под винду как то еще ражирует результат в зависимости от расстояний между словами.,
то есть при поиске по запросу слово1+слово2:
вначале выдает документы содержащие слово1+слово2, потом слово1+ххх+слово2, потом слово1+ххх+ххх+слово2., но на это я уже забил хотябы точные вхождения бы найти...

  Ответить  
 
 автор: Serj0002   (22.03.2012 в 04:27)   письмо автору
 
   для: Serj0002   (22.03.2012 в 02:05)
 

// ОТВЕЧАЮ САМ СЕБЕ - хранить слова в таком виде явно беспонтовая идея
// (за что спасибо разработчикам БД)
// Плоды бессоннной ночи -> уродливый тормозной запрос
// работает выводит все документы по рейтингу средней близости слов
// выводит список документов + в добавок еще склеивает слова так чтобы можно было
// прочитать что найдено ...

SELECT rating.pid, GROUP_CONCAT(`b` SEPARATOR ' ') as `w` FROM
(
SELECT
t1.pid,
avg(t2.s-t1.s) as avg_s

FROM
index AS t1,
index AS t2

WHERE t1.s < t2.s
AND t1.pid=t2.pid /* в одном документе */
AND t1.w="Но" /* Слово1 */
AND t2.w="," /* Слово2 */

GROUP BY pid
order by avg_s
) as rating,
index
where index.pid=rating.pid
GROUP BY pid

// Может... может можно как то лучше (на локальном запрос 1,5 ссекунды выполняется )
// а на загруженном серваке... мне кажется вообще все повиснет
// в запросе описанно только последовательность 2х слов... (я предпологаю формировать
// запрос динамически на пхп из всего что ввел пользователь в форму поиска)
// => каждое слово в поисковом запросе будет стоить серваку перелопачивания
// дополнительно подклеенной таблицы

// ппц ПОДСКАЖИТЕ КАК ОПТИМИЗИРОВАТЬ ЗАПРОС?!
// кто с подобной структурой хранения данных сталкивался....

  Ответить  
 
 автор: Valick   (22.03.2012 в 04:45)   письмо автору
 
   для: Serj0002   (22.03.2012 в 04:27)
 

обычно полнотекстовым поиском пользуются

  Ответить  
 
 автор: Serj0002   (22.03.2012 в 05:38)   письмо автору
 
   для: Valick   (22.03.2012 в 04:45)
 

у меня база - есть данность и структуру ее менять низя )

Сделал нормальные индексы - не так уж все и плохо

тестовая база (542502 строки) - время запроса 0.397 s
На компе CPU 500мгц оперативка 256мег (виртуалка)

542502 строки соответствуют ~1000 страниц текста

Тормозновато конечно.

Я вообще с текстовым поиском никогда не работал.,

Подскажите знающие люди, если использовать FULLTEXT индексы, или в Sphinx, при сохранении того же функционала (ражирование результатов) прирост скорости будет?

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

  Ответить  
 
 автор: Valick   (22.03.2012 в 08:54)   письмо автору
 
   для: Serj0002   (22.03.2012 в 05:38)
 

попробуйте :)

  Ответить  
 
 автор: Serj0002   (23.03.2012 в 06:18)   письмо автору
 
   для: Valick   (22.03.2012 в 08:54)
 

СПАСИБО; ЗАПРОС НЕМНОГО ПОДПРАВИЛ;теперь в 5млн строк ищет за тысячные секунды.... не хуже сфинкса)) написал индексатор для построения таких индексов со стримером портера... тема закрыта.
p.s. похоже мне нужен блог..

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования