YuriBtr 58 Опубликовано: 17 июня 2018 Рассказать Опубликовано: 17 июня 2018 Заметил, что выборка похожих новостей через тег {related-news} очень и очень далека от идеала. Например в статьях про ДТП выводятся "похожие" новости про ямы на дорогах или концерты. При том, что новости про ДТП почти каждый день попадают на сайт. Как следует из анализа \engine\modules\show.full.php, поиск похожих делается только в момент первого открытия новости, и не перестраивается после, пока не обнулишь поле related_ids (например через "Перестроение кэша похожих новостей") . Поиск похожих новостей делается через: SELECT ... MATCH (title, short_story, full_story, xfields)... AGAINST Как видно, запрос MATCH AGAINST проходит не в boolean режиме (в отличие от полнотекстового поиска). А значит для нормальной работы этого запроса требуется полнотекстовый индекс ( FULLTEXT) у тех полей, по которым проходит поиск. Как видно из структуры БД у указанных полей (title, short_story, full_story, xfields) отсутствует таковой индекс. Его можно добавить самому, но теперь вопрос @celsoft: а это так и должно быть или у меня не обновилась база при обновлении скрипта? К тому же судя по инструкции нужно еще и сортировать результаты по релевантности (делая два запроса MATCH AGAINST - второй пример по ссылке). У нас же сортировки вообще не наблюдается. Кстати, было бы неплохо делать автоматический сброс кеша похожих новостей хотя бы раз в день (отдельно от настройки "Количество дней, в течение которых кешировать полную новость после ее публикации"). Цитата Ссылка на сообщение Поделиться на других сайтах
celsoft 6 082 Опубликовано: 17 июня 2018 Рассказать Опубликовано: 17 июня 2018 52 минуты назад, YuriBtr сказал: Как следует из анализа \engine\modules\show.full.php, поиск похожих делается только в момент первого открытия новости, и не перестраивается после, пока не обнулишь поле related_ids (например через "Перестроение кэша похожих новостей") . так и должно быть, т.к. это тяжелый запрос, и его результаты сохраняются, поэтому в админпанели и есть соответствующий раздел в админпанели. 54 минуты назад, YuriBtr сказал: Как видно, запрос MATCH AGAINST проходит не в boolean режиме Так и должно быть. Потому как идет поиск по отдельным ключевым словам, а идет сравнение всего текста публикаций. 1 час назад, YuriBtr сказал: Как видно из структуры БД у указанных полей (title, short_story, full_story, xfields) отсутствует таковой индекс. Его можно добавить самому, но теперь вопрос @celsoft: а это так и должно быть или у меня не обновилась база при обновлении скрипта? Ошибаетесь. В оригинальной структуре такой индекс есть. В БД составной индекс FULLTEXT KEY `short_story` (`short_story`,`full_story`,`xfields`,`title`). Он там всегда был, это не при обновлении добавлялся, он существовал всегда. Если у вас его нет, то создайте его. Возможно вы просто не обращается внимания что это составной индекс, думая, что он у вас только short_story по имени. Посмотрите внимательнее, если его нет, то конечно вам нужно его создать. 1 час назад, YuriBtr сказал: К тому же судя по инструкции нужно еще и сортировать результаты по релевантности (делая два запроса MATCH AGAINST - второй пример по ссылке). У нас же сортировки вообще не наблюдается. А вот это уже маленькая недоработка. Нужно будет добавить. Как то даже странно, что в поиске это есть, а в этом моменте забыли. Добавим в следующей версии скрипта. Цитата Ссылка на сообщение Поделиться на других сайтах
YuriBtr 58 Опубликовано: 17 июня 2018 Рассказать Опубликовано: 17 июня 2018 (изменено) Автор 1 час назад, celsoft сказал: Ошибаетесь. В оригинальной структуре такой индекс есть. В БД составной индекс FULLTEXT KEY `short_story` (`short_story`,`full_story`,`xfields`,`title`). Он там всегда был, это не при обновлении добавлялся, он существовал всегда. Да, прошу прощения, действительно есть, это видно по запросу: select index_name, group_concat(column_name) as columns from information_Schema.STATISTICS where table_schema = 'your_db_name' and table_name = 'dle_post' and index_type = 'FULLTEXT' group by index_name; Я неправильно смотрел наличие этого индекса в phpMyAdmin. Кстати в \engine\ajax\find_relates.php также есть выборка но с учетом релевантности. Изменено 17 июня 2018 пользователем YuriBtr Цитата Ссылка на сообщение Поделиться на других сайтах
YuriBtr 58 Опубликовано: 17 июня 2018 Рассказать Опубликовано: 17 июня 2018 Автор Если кому интересно, алгоритм определения похожих новостей удалось заметно улучшить (хотя еще далеко до идеала): В файле engine/modules/show.full.php: заменить $body = strip_tags( stripslashes( $metatags['title'] . " " . $body ) ); на $body = strip_tags( stripslashes( $metatags['title'] . " " . $metatags['keywords'] . " " . $social_tags['news_keywords'] . " " . $body ) ); чуть ниже в этом же файле заменить $db->query( "SELECT id, date, short_story, xfields, title, category, alt_name FROM " . PREFIX . "_post WHERE {$where_category}{$allowed_cats}{$not_allowed_cats}MATCH (title, short_story, full_story, xfields) AGAINST ('$body') AND id != " . $row['id'] . " AND approve=1" . $where_date . " LIMIT " . $config['related_number'] ); на $db->query( "SELECT id, date, short_story, xfields, title, category, alt_name, MATCH (title, short_story, full_story, xfields) AGAINST ('$body') as score FROM " . PREFIX . "_post WHERE {$where_category}{$allowed_cats}{$not_allowed_cats} MATCH (title, short_story, full_story, xfields) AGAINST ('$body') AND id != " . $row['id'] . " AND date < NOW() AND approve=1" . $where_date . " ORDER BY score DESC, date DESC LIMIT " . $config['related_number'] ); Кстати не нашел где формируется условие $where_date, полагаю что про него забыли. В нем можно прописать ограничение по дате, чтобы не тянуть старые новости, например так: $where_date = " AND date >= NOW() - INTERVAL 365 DAY AND date < NOW() "; 1 Цитата Ссылка на сообщение Поделиться на других сайтах
Gameer 310 Опубликовано: 18 июня 2018 Рассказать Опубликовано: 18 июня 2018 5 часов назад, YuriBtr сказал: Кстати не нашел где формируется условие $where_date, полагаю что про него забыли. В нем можно прописать ограничение по дате, чтобы не тянуть старые новости, например так: $where_date = " AND date >= NOW() - INTERVAL 365 DAY AND date < NOW() "; where_date формируется в engine/engine.php $thisdate = date ( "Y-m-d H:i:s", time () ); if ($config['no_date'] AND !$config['news_future']) $where_date = " AND date < '" . $thisdate . "'"; else $where_date = ""; Цитата Ссылка на сообщение Поделиться на других сайтах
YuriBtr 58 Опубликовано: 18 июня 2018 Рассказать Опубликовано: 18 июня 2018 Автор 5 часов назад, Gameer сказал: where_date формируется в engine/engine.php $thisdate = date ( "Y-m-d H:i:s", time () ); if ($config['no_date'] AND !$config['news_future']) $where_date = " AND date < '" . $thisdate . "'"; else $where_date = ""; Ну на самом деле $where_date используется не менее чем в 7 файлах движка. Если приведенное вами выражение инициализирует $where_date именно для show.full.php , то конечно перезаписывать его не надо, как я предложил в последнем абзаце. Цитата Ссылка на сообщение Поделиться на других сайтах
Gameer 310 Опубликовано: 18 июня 2018 Рассказать Опубликовано: 18 июня 2018 1 час назад, YuriBtr сказал: Ну на самом деле $where_date используется не менее чем в 7 файлах движка. Если приведенное вами выражение инициализирует $where_date именно для show.full.php , то конечно перезаписывать его не надо, как я предложил в последнем абзаце. show.full.php подключается в engine/engine.php и переменная так же объявлена в этом файле и больше не перезаписывается а так же участвует в остальных +- 20 запросах engine/engine.php 1 Цитата Ссылка на сообщение Поделиться на других сайтах
Max_Factor 0 Опубликовано: 2 сентября 2018 Рассказать Опубликовано: 2 сентября 2018 В 18.06.2018 в 12:23, Gameer сказал: show.full.php подключается в engine/engine.php и переменная так же объявлена в этом файле и больше не перезаписывается а так же участвует в остальных +- 20 запросах engine/engine.php Добрый вечер! А можно как то сделать вывод похожих новостей за определенный только период времени? Цитата Ссылка на сообщение Поделиться на других сайтах
Mr.IG 0 Опубликовано: 30 ноября 2018 Рассказать Опубликовано: 30 ноября 2018 Не понимаю что происходит! Для модуля существуют только 4 - все остальные 9 страниц из данной категории , ссылаются только на 4 страницы. Хелп, SOS и все такое! Цитата Ссылка на сообщение Поделиться на других сайтах
Captain 625 Опубликовано: 30 ноября 2018 Рассказать Опубликовано: 30 ноября 2018 1 час назад, Mr.IG сказал: Не понимаю что происходит! Для модуля существуют только 4 - все остальные 9 страниц из данной категории , ссылаются только на 4 страницы. Хелп, SOS и все такое! Правила форума Внимание !!! На данном форуме существуют достаточно жесткие правила, поэтому прежде чем создавать свою тему убедитесь, что вы внимательно их прочитали и поняли. 1. Если ваша тема начинается с вопроса и вам нужна какая либо помощь, то в самой теме в обязательном порядке вы должны указывать ссылку на ваш сайт. Если ваш сайт находится в локальной сети и вы не можете предоставить ссылку, или вы не хотите публиковать открытой ссылки на ваш сайт, то отправляйте персональное сообщение с вопросом в службу поддержки непосредственно с сайта http://dle-news.ru/, вам ответят на ваш вопрос в персональном порядке, в случае если пользуетесь платной версией скрипта и обладаете лицензией на скрипт. Если вы пользуетесь демоверсией, то вам необходимо разместить сайт в сети интернет, и только потом обращаться за помощью. По находящимся на локальных компьютерах демоверсиям никакой помощи и поддержки на форуме не оказывается. Если вы не указали сайт, то ваша тема будет закрыта, а аккаунт на форуме заблокирован. Цитата Ссылка на сообщение Поделиться на других сайтах
ss.seregin 5 Опубликовано: 23 декабря 2018 Рассказать Опубликовано: 23 декабря 2018 Столкнулся и я с вопросом выборки похожих новостей. Только задача у меня другая. Как исключить из блока похожих новостей статьи, которые не принадлежат ни к какой категории. Может есть у кого какие-нибудь мысли на этот счет? Поделитесь плиз, если не затруднит. Спасибо. Цитата Ссылка на сообщение Поделиться на других сайтах
SSID 2 Опубликовано: 24 декабря 2018 Рассказать Опубликовано: 24 декабря 2018 (изменено) 1 час назад, ss.seregin сказал: Столкнулся и я с вопросом выборки похожих новостей. Только задача у меня другая. Как исключить из блока похожих новостей статьи, которые не принадлежат ни к какой категории. Может есть у кого какие-нибудь мысли на этот счет? Поделитесь плиз, если не затруднит. Спасибо. Включить показ похожих новостей только из категорий просматриваемой новости, это должно решить вашу проблему. Изменено 24 декабря 2018 пользователем SSID Цитата Ссылка на сообщение Поделиться на других сайтах
ss.seregin 5 Опубликовано: 29 декабря 2018 Рассказать Опубликовано: 29 декабря 2018 В 24.12.2018 в 03:16, SSID сказал: Включить показ похожих новостей только из категорий просматриваемой новости, это должно решить вашу проблему. Изменено Понедельник в 03:17 пользователем SSID Спасибо, работает. Цитата Ссылка на сообщение Поделиться на других сайтах
Рекомендованные сообщения
Присоединяйтесь к обсуждению
Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.