Перейти к контенту
  • 0

Поиск по Описание темы


vandal_

Вопрос

Добрый день, меня инетресует почему по сик не ищет по "Описание темы", просто у меня на форуме туда записывают важную информацию. Но ипри поиске темы не выводяться.
Ссылка на комментарий
Поделиться на других сайтах

Рекомендуемые сообщения

  • 0
Форму расширенного поиска посмотрите.
Ссылка на комментарий
Поделиться на других сайтах

  • 0

Топикстартер прав, поиск по заголовкам не ищет по описаниям.

У поля description даже индекса нет:

  KEY `topic_firstpost` (`topic_firstpost`),
 KEY `last_post` (`forum_id`,`pinned`,`last_post`),
 KEY `forum_id` (`forum_id`,`pinned`,`approved`),
 KEY `starter_id` (`starter_id`,`forum_id`,`approved`),
 KEY `last_post_sorting` (`last_post`,`forum_id`),
 FULLTEXT KEY `title` (`title`)

 

Быстрое решение для 1.3:

ALTER TABLE `ibf_topics` ADD FULLTEXT INDEX ( `description` )

 

search_mysql_ftext.php

			$topics_query = "SELECT t.tid
						FROM ibf_topics t
						WHERE $topics_datecut t.forum_id IN ($forums)
						$topics_name AND t.approved=1 AND MATCH(title) AGAINST ('".trim($keywords)."' $boolean)";

заменить на

		$topics_query = "SELECT t.tid
						FROM ibf_topics t
						WHERE $topics_datecut t.forum_id IN ($forums)
						$topics_name AND t.approved=1 AND 
						(MATCH(title) AGAINST ('".trim($keywords)."' $boolean)
						OR MATCH(description) AGAINST ('".trim($keywords)."' $boolean))";

 

 

search_mysql_man.php

Перед

			$topics_query = "SELECT t.tid
						FROM ibf_topics t
						WHERE $topics_datecut t.forum_id IN ($forums)
						$topics_name AND t.approved=1 AND ($title_like)";

добавить

		$title_like = $title_like." OR ".str_replace("title","description",$title_like);

Ссылка на комментарий
Поделиться на других сайтах

  • 0

Согласен. Для 2.3(проверял на 2.3.6) аналогично:

 

ALTER TABLE `ibf_topics` ADD FULLTEXT INDEX ( `description` );

search_mysql_ftext.php:

				$topics_query = "SELECT t.tid, t.approved, t.forum_id
							FROM ".SQL_PREFIX."topics t
							WHERE $topics_datecut $t_forum_query
							$topics_name AND MATCH(title) AGAINST ('".trim($keywords)."' $boolean)
							ORDER BY t.last_post {$this->is->sort_order}
							LIMIT {$this->resultlimit}";

заменить на

				$topics_query = "SELECT t.tid, t.approved, t.forum_id
							FROM ".SQL_PREFIX."topics t
							WHERE $topics_datecut $t_forum_query
							$topics_name AND
							(MATCH(title) AGAINST ('".trim($keywords)."' $boolean)
							OR MATCH(description) AGAINST ('".trim($keywords)."' $boolean))
							ORDER BY t.last_post {$this->is->sort_order}
							LIMIT {$this->resultlimit}";

 

search_mysql_man.php

После

$title_like .= ")";

добавить

$title_like = "( $title_like OR ".str_replace("title","description",$title_like).")";

После

$title_like = " LOWER(t.title) LIKE '%".trim($keywords)."%' ";

добавить

$title_like = "( $title_like OR ".str_replace("title","description",$title_like).")";

 

Вместо последнего я бы конечно сделал иначе, на случай если кто-то будет искать слова title или description. первое может быть Мускулем и не индексируется, а вот второе должно.

Ссылка на комментарий
Поделиться на других сайтах

  • 0
Согласен. Для 2.3(проверял на 2.3.6) аналогично:

 

ALTER TABLE `ibf_topics` ADD FULLTEXT INDEX ( `description` );

search_mysql_ftext.php:

				$topics_query = "SELECT t.tid, t.approved, t.forum_id
							FROM ".SQL_PREFIX."topics t
							WHERE $topics_datecut $t_forum_query
							$topics_name AND MATCH(title) AGAINST ('".trim($keywords)."' $boolean)
							ORDER BY t.last_post {$this->is->sort_order}
							LIMIT {$this->resultlimit}";

заменить на

				$topics_query = "SELECT t.tid, t.approved, t.forum_id
							FROM ".SQL_PREFIX."topics t
							WHERE $topics_datecut $t_forum_query
							$topics_name AND
							(MATCH(title) AGAINST ('".trim($keywords)."' $boolean)
							OR MATCH(description) AGAINST ('".trim($keywords)."' $boolean))
							ORDER BY t.last_post {$this->is->sort_order}
							LIMIT {$this->resultlimit}";

 

search_mysql_man.php

После

$title_like .= ")";

добавить

$title_like = "( $title_like OR ".str_replace("title","description",$title_like).")";

После

$title_like = " LOWER(t.title) LIKE '%".trim($keywords)."%' ";

добавить

$title_like = "( $title_like OR ".str_replace("title","description",$title_like).")";

 

Вместо последнего я бы конечно сделал иначе, на случай если кто-то будет искать слова title или description. первое может быть Мускулем и не индексируется, а вот второе должно.

Cпасибо, для 2.2.2 тоже пойдет.

Ссылка на комментарий
Поделиться на других сайтах

Присоединиться к обсуждению

Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить на вопрос...

×   Вы вставили отформатированный текст.   Удалить форматирование

  Допустимо не более 75 смайлов.

×   Ваша ссылка была автоматически заменена на медиа-контент.   Отображать как ссылку

×   Ваши публикации восстановлены.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Зарузка...
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.