помогите ускорить поиск в DLE

Z
На сайте с 15.09.2010
Offline
20
2196

в последнее время сайт периодически висит лишь по причине того, что при поиске на сайте очень много запросов вида

SELECT id, title, date, category, alt_name, flag FROM dle_post WHERE MATCH (title, short_story, full_story, xfields) AGAINST ('тут очень длинный текст новости ') AND id != 74682 AND approve='1' 

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

движок DLE

как можно попытаться выйти из сложившейся ситуации?..

Игры (подписки, псевдо-подписки мтс+билайн) (http://www.prostopartnerka.ru/?refid=1001)
Str01tel
На сайте с 27.12.2009
Offline
26
#1

этот запрос генерируется блоком - последние новости

Z
На сайте с 15.09.2010
Offline
20
#2
Str01tel:
этот запрос генерируется блоком - последние новости

о, спасибо.

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

zkolobov добавил 29.10.2010 в 01:39

Str01tel, блок последние новости это Вы имели ввиду вывод самых рейтинговых статей на сайте?

Str01tel
На сайте с 27.12.2009
Offline
26
#3
zkolobov:

блок последние новости это Вы имели ввиду вывод самых рейтинговых статей на сайте?

немного опечатался - это блок "похожих" новостей

Z
На сайте с 15.09.2010
Offline
20
#4

нашел код, который генерирует данные запросы. файл engene\modules\show.full.php

$db->query( "SELECT id, title, date, category, alt_name, flag, news_read FROM " . PREFIX . "_post WHERE MATCH (title, short_story, full_story, xfields) AGAINST ('$body') AND id != " . $row['id'] . " AND approve='1'" . $where_date . " LIMIT " . $config['related_number'] );

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

t0os
На сайте с 25.02.2008
Offline
81
#5

Для начала определитесь, по каким полям хотите искать в базе.

Z
На сайте с 15.09.2010
Offline
20
#6

думаю, что только title будет достаточно, как считаете?

zkolobov добавил 29.10.2010 в 13:22

попытался вместо

AGAINST ('$body')

вставить

AGAINST ('$title')

получилась шляпа.. выдает либо очень мало новостей либо совсем не находит..

вставлял после '$title' in boolean mode - такая же шляпа.. :(

что делать?

N
На сайте с 06.05.2007
Offline
419
#7
немного опечатался - это блок "похожих" новостей

Текст новости ведь не меняется раз в секунду?

Нормальный движок должен только при обновлении новостей обновлять характеристики похожести.

Хоть с этих DLE и спрос небольшой, но ведь есть куда оптимизировать логику.

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

'тут очень длинный текст новости'

и какой там обычно текст?

Если там встречаются часто используемые слова, то их можно внести в специальный список стоп-слов. Индекс станет меньше, а скорость поиска больше. Поиск по таким словам не выдаст ничего. Подробности в документации к утилите myisam_ftdump.

Конечно, если у вас поиск 15 секунд идет, то и дамп займет приличное время.


Очень правильный вопрос.
Дело в том что поиск в DLE осуществляется по контексту, т.е. ищутся все записи на предмет словосочетания - поисковой фразы.
Этот запрос не оптимизируется в MySQL так как поиск происходит не по индексу, а тупо перебором в ЛОБ.
Индекс по полю Title даже если и создан, то он не задействован при таком запросе.

И неправильный ответ.

Нельзя выполнить MATCH ..AGAINST, если полнотекстовый индекс по требуемым полям не создан. Будет ошибка Can't find FULLTEXT index matching the column list.

Значит индекс в DLE создан на все поля. Придумай другую сказочку.

Кнопка вызова админа ()
N
На сайте с 06.05.2007
Offline
419
#8

websin2011, я нашел DLE. полнотекстовый индекс там создан все 4 поля, по которым делается поиск.

все, что я предположил оказалось правдой.


CREATE TABLE dle_post(
..
short_story TEXT NOT NULL,
full_story TEXT NOT NULL,
xfields TEXT NOT NULL,
title VARCHAR(255) NOT NULL,
..
FULLTEXT INDEX short_story (short_story, full_story, xfields, title),

Тебе я порекомендую изучать mysql. Многие вещи там сделаны вопреки реляционной алгебре.

И текстовый поиск и создание индексов на memo удивительным образом работают в mysql.

N
На сайте с 06.05.2007
Offline
419
#9

websin2011, водка - плохо. особенно до 5 утра.

обязательно помогу вам с репутацией чуть попозже.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий