Этот урок связан с проектом Собственное поисковое ядро

Пишем собственное поисковое ядро. Часть 2.

Продолжаем разработку нашего поискового ядра. В данном уроке мы напишем еще несколько функций и рассмотрим работу с шаблоном.

Первая часть урока

1. Форма поиска и передаваемые данные

Небольшое отступление сделаем и посмотрим на нашу форму отправки данных:

Как видите тут ничего необычного нет. Мы передаем значение search_word файлу search_result.php. Т.е. у нас в нашей системе добавился файл куда и будут выводиться результаты поиска и теперь наша структура выглядит вот так:

Т.е. в файле search_result.php мы будем получать значение запроса и обрабатывать его примерно таким образом:

if(isset($_REQUEST["search_word"])) {
	$query = trim($_REQUEST["search_word"]); //делаем небольшую чистку, можете добавить еще защиту от различных инъекций и подозрительных переменных, которые могут ввести вам вредные пользователи
	$keywords = explodeQuery($query); //тут наша функция с первой части урока
	
	$sql = "SELECT id, title, keywords, text, category FROM materials WHERE public=1"; //ищем только опубликованные материалы
	$result = mysql_query($sql);
	if ($mysql_num_rows($result)!=0) { //проверяем наличие записей, если нет, то естественно ничего не выведем и прекратим любую работу системы
		while($row = mysql_fetch_assoc($result))
		{
			$materials[$row[id]] = $row; //Формируем массив $materials с найденными материалами
		}
        echo searchResult($materials,$keywords); //выводим наш результат поиска, функцию мы рассмотрим ниже
	}
    else {
    	echo "напишем тут какую-нибудь ошибку для пользователя";
    }
}

Как видите ничего сложного тут нет. У нас как видите появилась одна необъявленная функция searchResult(). Ее написанием сейчас мы и займемся.

2. Результат поиска.

Рассмотрим немного схему того, как система будет искать необходимые пользователю материалы:

Составитель схем из меня никудышный, но думаю смысл понятен. Поэтому приступим к написанию функции.

function searchResult($materials, $keywords) {
	foreach ($materials as $material) { //Выше мы сформировали массив $materials который мы теперь выводим разбивая на элементы массива $material
		$title = htmlspecialchars(strip_tags($material[title]));	//Тут мы чистим все значения массива - title, text и keywords от тегов и посторонних символов
		$text = htmlspecialchars(strip_tags($material[text]));		//как вариант можно еще все слова перевести в нижний регистр
		$key = htmlspecialchars(strip_tags($material[keywords]));
		$wordWeight =0; //вес слова запроса приравниваем к 0
		foreach ($keywords as $word) { 	//теперь для каждого поискового слова из запроса ищем совпадения в тексте
			$reg = "/(".$word.")/"; 	//маска поиска для регулярной функции
			/* 	
            	Автоматически наращиваем вес слова для каждого элемента массива.
				Так же сюда можно включить например поле description если оно у вас есть.
                Оставляем переменную $out, которая выводит значение поиска. Она нам может и не пригодится, но пусть будет, может быть вы найдете ей применение.
			*/
			$wordWeight = preg_match_all($reg, $title, $out);	//как вариант можно еще для слов в заголовке вес увеличивать в два раза
			$wordWeight += preg_match_all($reg, $text, $out);	//но это вам понадобиться если вы будете выводить материалы в порядке убывания по релевантности
			$wordWeight += preg_match_all($reg, $key, $out);	//мы же пока этого делать не будем
			$material[relevation] += $wordWeight; //увеличиваем вес всего материала на вес поискового слова
			
			//раскрашиваем найденные слова функцией, которую мы писали в первой части урока
			$title = colorSearchWord($word, $title, "violet");
			$text = colorSearchWord($word, $text, "violet");
			$key = colorSearchWord($word, $key, "violet"); //незнаю зачем ключевые слова окрасил, их ведь не обязательно выводить пользователю :)
		}
        //Теперь ищем те материалы, у которых временный атрибут relevation не равен 0
		if($material[relevation]!=0) {
			//Возвращаем массивы в нормальное состояние с уже обработанными данными
			$material[title] = $title;
			$material[text] = $text;
			$material[keywords] = $key;
			echo simpleToTemplate($material, "search_result"); //новая функция, которая вернет нам шаблон с результатами поиска
		}
        //Иначе просто грохаем весь элемент material за ненадобностью
		else {
			unset($material);
		}
	}
}

Вот такая сложная функция, в которой у нас появилась еще одна новая функция и мы ее сейчас рассмотрим отдельно. Что касательно этой функции то смысл ее прост, она просто проверяет вхождение каждого слова в три атрибута материала и увеличивает временно создаваемый атрибут (его нет в базе данных!) для того, чтобы определить, какие материалы нам подходят.

3. Шаблон и функция его вызова.

Ну вот собственно мы подходим к функции визуального формирования результата запроса на основании шаблона search_result.tpl. Для начала рассмотрим функцию, которая при помощи буфера позволит нам динамически сформировать всю структуру HTML.

function simpleToTemplate($value, $template) {
		ob_start(); // Включаем буферизацию вывода, чтобы шаблон не вывелся в месте вызова функции
		// Подключаем необходимый нам шаблон, который просто ждет наш массив
		include('templates/'.$template.'.tpl'); 
		return ob_get_clean(); //Возвращаем результат буфера и очищаем его
	}

Функция достаточно небольшая, она передает нашему шаблону массив данных и материала, а тот в свою очередь собирает нам вменяемую HTML верстку, которую мы определим в самом шаблоне result_search.tpl.

<div id="search_result_element<? echo $value[id] ?>">
    <h4><a href='index.php?cat=<?=$value[category] ?>&amp;mat=<?=$value[id] ?>&amp;style=1'><?=$value[title] ?></a></h4>
    <? $text = "<p>".substr($value[text],0, 430)."</span>...</p>"; echo $text; ?>
    <p>Количество совпадений: <?=$value[relevation];?></p>

Вот собственно и готов поиск. В следующих уроках мы подумаем как улучшить наше ядро, рассмотрим новые приемы работы с массивами и улучшим в целом всю систему. Пример работы поиска можно посмотреть например на сайте www.protege-star.com

Спасибо за внимание.

Данный урок подготовлен для вас командой сайта ruseller.com
Источник урока: www.ruseller.com
Автор: Павлов Александр
Урок создан: 10 Октября 2011
Просмотров: 39500
Правила перепечатки


5 последних уроков рубрики "PHP"

  • Фильтрация данных с помощью zend-filter

    Когда речь идёт о безопасности веб-сайта, то фраза "фильтруйте всё, экранируйте всё" всегда будет актуальна. Сегодня поговорим о фильтрации данных.

  • Контекстное экранирование с помощью zend-escaper

    Обеспечение безопасности веб-сайта — это не только защита от SQL инъекций, но и протекция от межсайтового скриптинга (XSS), межсайтовой подделки запросов (CSRF) и от других видов атак. В частности, вам нужно очень осторожно подходить к формированию HTML, CSS и JavaScript кода.

  • Подключение Zend модулей к Expressive

    Expressive 2 поддерживает возможность подключения других ZF компонент по специальной схеме. Не всем нравится данное решение. В этой статье мы расскажем как улучшили процесс подключение нескольких модулей.

  • Совет: отправка информации в Google Analytics через API

    Предположим, что вам необходимо отправить какую-то информацию в Google Analytics из серверного скрипта. Как это сделать. Ответ в этой заметке.

  • Подборка PHP песочниц

    Подборка из нескольких видов PHP песочниц. На некоторых вы в режиме online сможете потестить свой код, но есть так же решения, которые можно внедрить на свой сайт.

или авторизуйтесь, чтобы добавлять комментарии, оценивать уроки и сохранять их в личном кабинете
  • 10 Октября 2011 07:18
    mevr
    Спасибо! Ждем продолжения
    • 8 Ноября 2011 09:59
      kosaks
      красить текст на сервере не кошерно. Используем явуск. Есть и плагины под это дело: jQuery Highlight plugin. Прошу ответ от опытных если тут бывают. На какой цифре будут тормоза больше 3 секунд?..
  • 10 Октября 2011 08:04
    Revy
    Отлично! Как раз пишу цмс, будет от чего оттолкнуться. Однозначно в закладки.
  • 10 Октября 2011 09:06
    evgenics
    1.
    <?=$value[relevation];?>
    short_open_tag не рекомендуется использовать, поэтому лучше писать так:
    <?php echo $value[relevation];?>
    Не сочтите за чистоплюйство, просто у некоторых может не заработать (насколько я помню в php 5.3 по умолчанию short_open_tag = off), сам раньше пользовался короткой формой и более того мне она нравиться, но все же нужно придерживаться рекоммендаций. 2.
    $value[relevation]
    ключ массива правильнее писать в кавычках
    $value['relevation']
    иначе в логах сервера будет куча ворнингов, т.к. при отсутствии кавычек php в первую очередь пытается найти константу с именем relevation, а когда мы ему указываем в кавычках, то для него это однозначно ключ массива
    • 10 Октября 2011 09:40
      alexxhub
      Первое скажем так у меня хвостом тянется из Битрикса :) А второе не так критично, в конце концов данный тип ошибок можно отключить. Ну это уже мелкие тонкости. Но для чистоты кода конечно никто не запрещает. Хотя насколько помню у Евгения так же видел массивы, поэтому не думаю что это столь критично. И конечно же приятно читать адекватную критику. Ждем вот троллей.
      • 10 Октября 2011 16:27
        notbot
        Если равняться на то, что было у Евгения, лучше ничего не делать вообще. (Вспомните тот же поиск по блогу, где запрос обрабатывался функцией stripslashes().) Согласен с evgenics.
    • 9 Октября 2012 16:22
      aburj
      Я часто использую short_tags в php 5.3
  • 10 Октября 2011 10:21
    ivan.shamshur
    Да уж.
    SELECT id, title, keywords, text, category FROM materials WHERE public=1
    А если у меня в базе > 1000 записей. и чтобы сделать поиск по одному слову мне надо вытащить все записи из базы?! Очень плохой пример!
    • 10 Октября 2011 16:28
      notbot
      Да, особенно если учитывать что использование ЦП ограничено хостером, а использование памяти - до 8 (16) МБ.
    • 10 Октября 2011 17:21
      RebelioUS
      Действительно, этот момент всегда являлся самым слабым практически во всех поисковых наработках. Как вы с этим справитесь если материалов реально больше 1-2к? Может порциями по датам выбирать? Интересны варианты рещений господа.
      • 11 Октября 2011 01:31
        alexxhub
        Обязательно подумаю, как можно снизить нагрузку. Но скажем так у меня сайту уже 3 года и больше 600 материалов на нем так и не собралось, и ищет вполне адекватно и быстро, хостер пока не жаловался. Но тема конечна достойна внимания и ее обязательно надо развивать. Так что я с вами вполне солидарен и еще раз говорю адекватная критика всегда приятна. Я знаю что могут быть решения более оригинальные и производительные, но скажем так, к ним надо подходить постепенно. Да и народу так интереснее учиться, когда от меньшего к большему.
      • 9 Октября 2012 16:25
        aburj
        А если каждой строке в mysql ставить индекс релевантности? А потом вытягивать лимитом в 30 единиц?
    • 10 Октября 2011 20:16
      Revy
      для этого существует раздельный поиск (по тайтлам, по описаниям и т.д. ) чтобы не вытаскивать все. Например для обычной формы поиска сделать по умолчанию поиск по тайтлам чтобы легкий был а уже на странице поиска дать выбор пользователю как он хочет искать: в заголовка, статьях, комментариях и т.д.
    • 2 Декабря 2012 00:49
      malina95
      Для того чтобы не вытаскивать все тексты из базы из-за одного слова лучше немного переделать запрос к базе через LIKE
  • 10 Октября 2011 13:56
    ntvsx193
    Направление даешь отличное, Саша. Никогда не пользовался выводом данных через шаблон. Теперь осознал с чем его едят и какой от этого толк. Спасибо, жду следующего урока.
    • 10 Октября 2011 17:49
      truehazard
      а ООП для тебя наверное вообще что то невероятное ?
      • 11 Октября 2011 01:29
        alexxhub
        Тем кто разбирается в ООП не проблема будет все это дело перевести в соответствующий вид. Специально дается в более простом виде, ООП сложнее в осознании, что скрывать.
      • 11 Октября 2011 13:02
        ntvsx193
        truehazard ну раз вы такой умник-гений, сделайте что-нибудь полезное. А мы посмотрим, оценим. Ткнем носом на дырки и косяки.
    • 9 Октября 2012 16:26
      aburj
      Такие функции называются шаблонизаторами. И написать его для знающего легко!
  • 10 Октября 2011 16:31
    notbot
    Неплохой урок кроме вынимания всех записей из базы. Нажатие кнопки "найти" повесит сервер - единственная уязвимость, ни о каких инъекциях и речи не может быть.
    • 11 Октября 2011 01:27
      alexxhub
      читайте первую часть я там в самом начале сказал, что давайте пока без проверок на инъекции, а то урок растянется на неимоверное количество частей. В конце концов уроков на эту тему была масса.
  • 10 Октября 2011 23:03
    m.peshekhonov
    а можно всё упростить до одной строки :) получить ПОСТОМ $search и $result = mysql_query("SELECT * FROM hotel WHERE title LIKE '%" . $search . "%' ORDER BY id DESC"); найдёт всё!
    • 11 Октября 2011 01:37
      alexxhub
      найдите таким способом фразу, а не слово и вы поймете в чем разница.
      • 11 Октября 2011 20:03
        SeRsiD_bRo
        а OR LIKE не поможет?
        • 12 Октября 2011 00:47
          alexxhub
          Проблема в том, что он будет искать точное вхождение того запроса, который ввел пользователь. Согласитесь не всегда есть в текстах сайта те фразы которые могут вводить пользователи. Например две фразы несущие один смысл, но набранные по разному: "напишем поисковое ядро" и "как написать систему поиска" и тут уже будет зависеть все от того, какая фраза с точностью до символа встречается в материалах. Я вот думаю расширить просто ядро и показать на примере, что это не лучший вариант, но его как часть поиска можно конечно использовать. Например при поиске по 1 слову.
          • 12 Октября 2011 11:33
            SeRsiD_bRo
            я имею в виду примерно вот такой запрос
            SELECT * FROM materials WHERE (`public` = 1) AND (`title` LIKE '%".implode($keywords, "%' OR `title` LIKE '%")."%')...
            
            но, думаю, это будет работать медленно
            • 2 Декабря 2012 00:53
              malina95
              Для меня нету проблемы с LIKE, просто при входе разбить переменную на элементы массива и разбивать например по пробелу а потом искать, но ещё лучше считать сколько слов в массиве получается столько делать и запросов, если одно слово то искать одно слово, если 2 то использовать or и т.д.
  • 12 Октября 2011 03:56
    Александр Харечко
    >> $material[title] = $title; >> $material[text] = $text; >> $material[keywords] = $key; автор Вы не пробовали включить вывод ошибок E_ALL?
  • 24 Октября 2011 15:21
    Slonoritsar
    Интересно было почитать, сам я честно говоря не пользуюсь этими "движками"(может и зря), я просто обычно использую LIKE просто да и все)) как будет время, доработаю твой движок немного и переведу его к себе на сайт, тебе конечно большой +. И еще, полностью согласен с evgenics, пишите код красиво, раз уж выложили тут :)
  • 2 Ноября 2011 10:44
    perr1n
    Подскажите, как отсортировать массив полученных результатов по весу статьи?
  • 6 Ноября 2011 22:47
    TavRoX
    ребят а исходники можно? а то не доганяю нечего куда чего
  • 7 Ноября 2011 19:28
    kosaks
    Нужен совет опытного девелопара. Собственно делаю сайт, на какой цифре статей данный поиск выйдет за время в 3 секунды. А то хотелось бы быть готовым к тормозам поиска заранее. (100-500-1000)? Собственно хочу свинкса поставить но нужен VDS пока нет смысла его ставить. По этому думаю сначала это прикрутить... Посоветуйте мб чего интересней прочитать или в каком направлении покопать? Моно сюда antoncosak@gmail.com
  • 9 Ноября 2011 11:20
    Afg4x4
    Откуда в файле
    search_result.php
    взялась функция explodeQuery
    $keywords = explodeQuery($query); //тут наша функция с первой части урока
    
    если она там не объявлена. А объявлена она в ядре поиска
    search_core.php.
    ? Получается эту функцию необходимо прописать и в файле search_result.php? Или просто подключить через
    include();
    ядро поиска в файл search_result.php?
  • 10 Ноября 2011 14:28
    mishador
    Скиньте кто-нибудь ссылку на исходники.
  • 11 Ноября 2011 10:33
    postman
    Мой вам совет. Написать скрипт по индексации Записей из БД и файлов. Разбить текст на слова. Эти слова добавить в БД. Так же создать таблицу где будут указываться id слов и их позиции в тексте и +5 -5 слов вокруг. Потом при поиске. Разбить предложение на слова и вытаскивать их ID и по ним определять где они есть и их релевантность. И сохранять результат в таблице БД. И каждый раз при поиске сперва проверяем, был ли такой поиск. если да, то вытащить результат. если нет то составить новый результат и если дата старого результата устарела то обновить. Индексацию можно в Кроне на серваке подключить. Автору сайта. Можно ли мне Как нибудь скинуть данный урок!? Писал эти скрипты сам, когда то давно. Думаю снова написать эти скрипты и даже улучшит. Я просто не жадный )
    • 11 Ноября 2011 12:05
      mstimekb
      Урок Вы можете скинуть в службу поддержки http://evgeniypopov.ru/ В случае, если урок будет одобрен, вы увидите его на страницах данного сайта.
      • 2 Февраля 2012 11:53
        lewen
        И мне lewen@email.ua
    • 12 Ноября 2011 10:01
      kosaks
      если не сложно скиньте плз сюда: antoncosak@gmail.com
    • 26 Ноября 2011 23:03
      Дима Нагулин
      и мене dimon119@mail.ru
  • 11 Ноября 2011 10:38
    postman
    А выше указанный урок. Не стоит этого вообще так делать. Когда БД маленькая еще терпимо. Но потом будут большие проблемы. )))) Это все будет ой как больно )))
    • 23 Ноября 2011 11:23
      m_hamlet
      Это просто простая реализация проблемы. Каждый может на основе этого скрипта сделать то, что более подходит ему.
    • 6 Января 2012 07:27
      VLOmper
      Урок для маленьких баз данных. Я например решу вопрос так, буду выбирать последние 500 записей из базы данных. Чтоб сервер не грузить
  • 11 Ноября 2011 10:57
    postman
    упс
  • 21 Ноября 2011 17:51
    sigrosigro
    а как отсортировать вывод данных по количеству совпадений??
  • 21 Ноября 2011 19:06
    sigrosigro
    и у меня не очищается предыдущий вывод результатов, а только пересчитывается кол-во совпадений и по моему выводит все записи с табл.
  • 22 Ноября 2011 21:06
    timondrik1991
    Статью про ядрышко нашол только вот и в ней не было то что мне нужно. Ни как не могу вывести из массива элементы в порядке релевантности. Релевантность подсчитывается криптом без проблем заносится в массив как надо а вот вывести в порядке убывания ни как не могу. Много примеров видел, только обьяснений как таковых нет. Хотелось бы чтобы следующая статья была посвещена именно этой теме :)
    • 24 Ноября 2011 16:43
      sigrosigro
      согласен
  • 24 Ноября 2011 16:42
    sigrosigro
    аууу...кто то заглядывает в коменты??
  • 24 Ноября 2011 19:51
    timondrik1991
    С релевантностью проблему решил. Появилась другая проблема, уже полностью готовый поисковик перестал искать русскоязычные слова, ищёт только англоязычные. Чтобы это могло быть? Главное что до и после проблемы ни чего не менял.
    • 26 Ноября 2011 21:24
      sigrosigro
      как решил проблему с релевантностью?
  • 28 Ноября 2011 06:12
    SteliosBox
    Супер!! thx
  • 28 Ноября 2011 17:51
    artamonov
    Да, да, да, ждем следующий урок!!! Очень хочется услышать о работе с БОЛЬШИМИ базами данных! Как справляться с нагрузкой. Для меня это очень актуально.
  • 3 Декабря 2011 21:19
    sigrosigro
    как подсчитать количество найденных материалов? и как прикрутить пагинацию??
    • 9 Декабря 2011 20:59
      timondrik1991
      В коде найди массив в который сохраняются уже отобранные по сценарию статьи и подсчитай элементы массива вункцией:
      $num = count($arr);
      Вот тебе и кол-во найденых статей
      • 6 Января 2012 07:18
        VLOmper
        А на примере показать слабо?
        С релевантностью проблему решил.
        Интересно и как же? Не хочешь поделиться? Я лично пока вижу решение и одной и другой проблемы только во javascript-е
  • 7 Декабря 2011 20:47
    stellavin
    пришлите пожалуйста исходники обоих частей на steelassasin@mail.ru
  • 9 Декабря 2011 21:25
    timondrik1991
    Да и вот вопрос. Рабочий класс пашет как надо, но только на локальной машине. На удалённом хостинге сначала искал только английские слова, но русские не видел. Ну тут явно кодировка и всё в этом роде. После чего в начале файла с классом прописал такую функцию:
    setlocale(LC_ALL,"ru_RU");
    После чего поисковик всё таки начал искать русские слова, но в функции задача которого подкрашивать найденые совпадения проблема с кодировкой осталась (слова заменялись на крякозябры). Использовал iconv, стал выделять весь текст статьи полность, та же байда и с convert_cyr_string. Что делать? Если кто знает, то плиз сообщите мне на мыло timondrik1991@mail.ru
  • 19 Декабря 2011 23:22
    hrach333
    Ничего не понятно, такое ощущение, что автор размышляет сам собой, а не для нас пишет. Хотя бы писал какой скрипт в каком файле нужно вставить. В крайнем случии хотя бы скинули ссылку для исходников. И их нет. Надеюсь, что когда полностью будет закончен этот проект, то и исходники этого движка будет готова.
    • 18 Марта 2012 03:16
      artinetha
      согласен
  • 26 Декабря 2011 18:07
    ebuilder
    Уже звучала мысль о поиске в БД через OR LIKE '&слово1&' OR LIKE '&слово2&' и т.д. Кто скажет, будет ли такой поиск более адекватным в плане нагрузки?
  • 27 Декабря 2011 18:39
    ebuilder
    Важное замечание - данная технология поиска подходит только для небольших сайтов. Для больших проектов однозначно Sphinx и подобные. По нагрузке на MySQL. При данной структуре запроса, для понижения нагрузки,надо использовать встроенный механизм кэширования запросов в MySQL. Или PEAR Cache_DB.
  • 3 Января 2012 16:13
    Frimen
    а готовые исходники поисковой системы у кого можно взять?
  • 22 Января 2012 15:18
    xzoner
    столько ошибок....
  • 20 Февраля 2012 06:28
    Inch
    Отличный урок, хотелось бы продолжение увидеть, если оно есть конечно
  • 24 Февраля 2012 16:09
    soulore
    Сначала бы исходники выложил, а потом продолжение писал!
    • 5 Марта 2012 21:25
      igor3310
      согласен исходники нужны а то как ядро подключать и описание переменных
  • 5 Марта 2012 12:52
    igor3310
    а скажите пожалуйста - сайт php+mssql там 23000 материалов - такой поиск подойдет? (в плане нагрузки и обработки)
  • 10 Марта 2012 12:33
    soulore
    Урок не понравился! Обосную: 1. Не понятно, что и куда вставлять. Если автор хотел написать все как можно быстрее, чего уж там кинул бы все скрипты в один код без объяснений. Такое впечатление, что написан проект специально для самого автора. 2. Если бы я знал что и куда вставлять и где что находится, я уж точно не стал смотреть этот урок. Я не прав? 3. Сначала напиши проект (заверши его) потом выкладывай. А то получается: "Я сварил суп, а через неделю я скажу вам как им не отравиться". 4. Нет исходников. Нам нужно понять принцип работы, разобраться в скрипте, перенести скрипты на сайт наконец... 5. Супер программисты по таким сайтам не лазают, а посещают их обычные люди такие как я. Спасибо.
  • 16 Июля 2012 09:58
    VLOmper
    Кто разобрался с выводом по количеству совпадений, отпишитесь. Потому, что я так и не разобрался, а вывод в том виде как есть полностью перечеркивает ценность поиска.
  • 21 Июля 2012 12:35
    pas_s_s
    foreach ($keywords as $word)
    пишет: Warning: Invalid argument supplied for foreach() in Z:\home\only-cs.com\www\search_result.php on line 65 Warning: Invalid argument supplied for foreach() in Z:\home\only-cs.com\www\search_result.php on line 65 Warning: Invalid argument supplied for foreach() in Z:\home\only-cs.com\www\search_result.php on line 65
  • 23 Августа 2012 23:51
    SergeBS
    Простите меня глупого, но я правда просидел очень долго! И в итоге у меня не вышло. Читал различные мануалы, чтобы осуществить данный поиск в действие! Я не сильно опытен, но все же сделал реально все! В итоге у меня нет ошибок! Но нет и выводов вовсе. Я просто не знаю что делать! Можно попросить автора написать мне? gh666@meta.ua
  • 25 Августа 2012 02:04
    SergeBS
    Автор, помогите разобраться! Все вышло, как я понял уже давно! Но "Количество совпадений: 0" вес не плюсуется и не могу понять причины!
  • 29 Октября 2012 15:49
    Frimen
    и мне скинь исходники этого поискового ядра. aafrimenaa@yandex.ru спасибо
  • 1 Ноября 2012 19:28
    oleksiyzz51
    Как прикрутить постраничною навигацию?
  • 22 Июня 2013 17:27
    rolar
    в коде для файла search_result.php допущена ошибка в строке 7 if ($mysql_num_rows($result)!=0) { //проверяем наличие записей, если нет, то естественно ничего не выведем и прекратим любую работу системы нужно убрать знак $ перед функцией mysql_num_rows
  • 1 Февраля 2014 03:28
    TavRoX
    сори я в этом всем не ахти какой спец, а можно расписать что в каком порядке подключается и т.д.
  • 7 Апреля 2014 16:55
    Филипп Львов
    А можно скинуть исходники урока и первого и второго. 13.11.90.corsar@mail.ru
  • 22 Июля 2014 22:58
    nexonion
    Сортировка по релевантности.
    function compare ($x, $y)	{	if ($x[relevation] == $y[relevation])	return 0;	else if ($x[relevation] < $y [relevation])	return 1;	else	return -1;	}	usort ($search_result, 'compare'); 
  • 30 Октября 2015 08:15
    EuRo123
    Помогу с настройкой этого скрипта, или любого другого, обращайтесь! san4o123123
  • Комментарий удален
    • 10 Октября 2011 10:20
      alexxhub
      Я же указывал, что систему надо учить. Извините но я полностью все выкладывать не могу. Скорее всего проблема в регулярной функции у которой стоит модификатор i, но по какой-то причине не срабатывает. Этот нюанс можно решит путем приведения текста в котором идет поиск в нижний регистр и поисковый запрос так же. В следующем уроке посмотрим как можно избавиться от этих недочетов. Ядро дописываю и смотрю какие моменты можно улучшить и дописать. Так что ждите.
      • 1 Марта 2012 01:29
        SergeBS
        А можно ли мне урок на мыло в исходниках? gh666@meta.ua
  • Комментарий удален
    • 10 Октября 2011 10:29
      alexxhub
      Мои, но я так же указал что нужно учить эту штуку. :) Конечно есть недоработки, но моя цель дать не готовый результат а направление. Проявите уже фантазию, так ведь не интересно просто копировать. :)
      • 10 Октября 2011 19:36
        mevr
        alexxhub +1 БОЛЬШОЙ
      • 5 Ноября 2011 13:45
        Xasler
        А когда будет следущий урок? Взорвусь скоро от не терпения)
      • 30 Мая 2012 22:34
        hardlviv
        +1. Согласен. А то дай им исходники ,разжуй, а может и еще за Вас на Ваш сайт это прицепить, чтоб у Вас мозг не напрягался!? Да , Ребят, автор, дал Вам идею, а дальше мозг включите свой!!!
        • 31 Июля 2012 02:58
          std_afx
          спасибо всем))))
          • 25 Октября 2013 14:28
            Tailer_Durden
            Урок отличный !
^ Наверх ^