Доход с нуля
Все что относится к интернету.

Своя поисковая система на сайте

Сообщение Slash 15 дек 2015, 20:19

Здравствуйте.
Хочу поделиться с теми, кто зарабатывает на своем сайте (PHP), возможно на интернет магазине, как сделать более удобным свой ресурс для ваших клиентов. Я расскажу, как сделать систему поиска на своем сайте. При помощи поиска ваш покупатель может гораздо быстрее найти нужный ему товар и покупатель останется доволен, или нет! Но его недовольство будет не из-за поисковика...

Своя поисковая система на сайте - poisk_po_saitu
Своя поисковая система на сайте - poisk_po_saitu (34.73 КБ) Просмотров: 1050


Практически во всех движках поиск уже встроен, если у вас он есть, то этот пост вам не нужен, но быть может вам потребуется ещё одна форма поиска или допилить существующий, тогда велком в тему, буду рад помочь!

Многие пользуются формой поиска от Яндекса или Гугла, что с одной стороны очень удобно, не надо быть программистом, что бы вставить пару строк в HTML документ. Но есть минус этих поисковиков - это время ушедшее на индексацию страницы. Например сегодня вы добавили товар, а в результатах поиска он появится только через день - два, а с Яндендексом и того дольше. Или наоборот, вы удалили товар, а он по прежнему появляется в поисковой выдачи. Покупатель переходит по ссылке, а там говорится: Товара нет в наличии. Всем известно, что скажет покупатель в данной ситуации? По этому, я считаю, что свой поиск - это лучше. Свой поиск работает на прямую со своей базой, и будет выдавать только то что в ней есть.

Ну, давайте начнем уже...
Конечно же любой поиск начинается с вода какой то фразы/слова, водится это слово в форму. Создаем такую форму:
Код: Выделить всё
        <!-- Search -->
        <div class="search">
            <form action="search.php" method="get">
                <input type="search" name="word" placeholder="Поиск" />
            </form>
        </div>
        <!-- END Search --> 

Что в этой форме:
Данная форма не имеет кнопки, только поле для вода слова, но по желанию кнопку можно добавить.
Для старта поиска следует нажать кнопку Enter.
Блок div с классом search, можете разукрасить при помощи css, как вам угодно. Если у вас своя задумка для вставки форму, можете удалить этот блок, я его написал для удобства.
action="search.php" - отдает команду куда перейти после старта.
method="get" - метод поиска. В данном случаи выбран метод GET. Это значит, что поисковое слово будет браться из URL.
type="search" - команда "поле поиска".
name="word" - название поля. В дальнейшем имя word будет обрабатываться, как переменная.
placeholder="Поиск" - выводится слово Поиск в поле, когда система не выполняет поиск.

Переходим к приему слова и его обработки. Содержимое файла search.php (команда передала из формы на этот файл: action="search.php"). Что бы было понятнее, прокомментирую по возможности код:
Код: Выделить всё
<?php
$connect 
= mysqli_connect($dbhost, $dbuser, $dbpasswd, $dbname); // Подключаемся к БД. Переменным должно быть назначены параметры доступа БД
if (!$connect) // Проверка на ошибку подключения
{
    exit('MySQL Error: ' . mysqli_error($connect)); // Если подключится не удалось, выводим ошибку
}

$word = (isset($_GET['word'])) ? $_GET['word'] : null; Забиваем переменную $word
$word 
= mysqli_real_escape_string($connect, trim($word)); // Экранируем символы и убираем пробелы

if(empty($word)) // Проверяем ведено ли слово
{
    echo 'Не ведено слова.'; // Если слово не введено, выводим сообщение ошибки
}
else if (iconv_strlen($word, 'utf-8') < 3) // Проверяем длину слова (мин 3 символа)
{
    echo 'Слово не может быть менее трех символов.'; // Если слово менее трех символов
}
else if (iconv_strlen($word, 'utf-8') > 20) // Проверяем длину слова (макс 20 символов)
{
    echo 'Слово не может быть более двадцати символов.'; // Если слово более двадцати символов
}
else // Если в ходе проверок ни каких ошибок не выявлено, двигаемся дальше
{
    $sql = 'SELECT * 
        FROM article
        WHERE article_text 
        LIKE "%'
 . $word . '%"'; // Составляем запрос
    $query = mysqli_query($connect, $sql); // Выполняем запрос
    if (!$query) // Проверяем запрос
    {
        echo 'Ошибка базы данных.'; // Если возникли проблемы при выполнения запроса
    }
    else // Все замечательно! Двигаемся дальше
    {
        while ($row = mysqli_fetch_assoc($query)) // Составляем массив
        {
            echo $row['article_title'] . '<br />'; // Выводим список заголовков статей, в которых было найдено веденное слово
        }
    }            
}

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

Прошу простить меня за допущенные ошибки в тексте, писать тексты не мой конек.

Надеюсь информация была полезной.
Спасибо за внимание.
Аватара пользователя
Slash
Эксперт
 
Сооб­щения: 432

Своя поисковая система на сайте

Сообщение Всезнающий

 Всегда можно начать с нуля и найти способ получать доход без вложений.
Всезнающий
 


Сообщение Administrator 15 дек 2015, 20:31

Спасибо за статью, очень полезная. Есть вопрос по опечаткам: можно ли сделать так, чтобы код учитывал опечатки при вводе поискового запроса и исправлял их? Насколько это сложно?
Аватара пользователя
Administrator
Администратор
 
Сооб­щения: 7053
Откуда: Россия

Сообщение Slash 16 дек 2015, 07:52

Имеется введу, как у Гугла - Возможно Вы имели введу? Над этим надо подумать, как такое реализовать...
Возможно тут придется сравнивать введенное слово со словами в БД.
Пока что, могу предложить исправление раскладки клавиатуры, с английского на русский, и наоборот... Это для тех, кто забывает перевести клавиатуру на нужный язык. Но тут все ровно нужен механизм, который используют поисковые системы Рунета, так как во многих случаях может получится каша...
Аватара пользователя
Slash
Эксперт
 
Сооб­щения: 432

Сообщение Administrator 16 дек 2015, 09:04

Да, как у Гугла и Яндекса. Яндекс автоматически исправляет опечатки и предлагает возможность искать по неисправленному запросу. Если получится решить проблему с опечатками, следующий шаг: учет синонимов и различных форм слова, например, слова с различными окончаниями.
Slash писал(а):Пока что, могу предложить исправление раскладки клавиатуры, с английского на русский, и наоборот... Это для тех, кто забывает перевести клавиатуру на нужный язык. Но тут все ровно нужен механизм, который используют поисковые системы Рунета, так как во многих случаях может получится каша...

Да, тоже сложный момент. Можно добавить проверку по своей базе данных. Например, если человек перепутал раскладку и вместо "sd карта" ввел "ыв карта", то можно сравнивать этот текст со своей базой данной и проверять есть ли в ней совпадения с учетом различных раскладок клавиатуры.

Самое сложное сделать поиск не просто по синонимам, а по смыслу введенной фразы. Если удастся решить эти самые сложные вопросы, то может получиться очень хороший скрипт - даже лучше любого стандартного.
Аватара пользователя
Administrator
Администратор
 
Сооб­щения: 7053
Откуда: Россия

Сообщение Slash 16 дек 2015, 11:31

Вот нашел такое решение: http://ufi.su/11 (Применение алгоритмов нечеткого поиска в PHP).
По словам автора:
Вдохновленный топиками о нечетком поиске и фонетических алгоритмах, захотел попытаться реализовать нечто подобное похожее на гугловское «Возможно, вы имели в виду: ...» средствами PHP.

Результат:
халадильнег -> холодильник
аффтамабэль -> автомобиль
матоцыгл -> мотоцикл
вэласэпэд -> велосипед
аформеть -> оформить
шына -> шина
превет -> привет
Но: пгевед -> перед

Код не проверял, но судя по комментариям он вполне рабочий.
Аватара пользователя
Slash
Эксперт
 
Сооб­щения: 432

Сообщение Administrator 16 дек 2015, 11:35

Да, похоже это то что надо.
Аватара пользователя
Administrator
Администратор
 
Сооб­щения: 7053
Откуда: Россия

на главнуюна главную



Вверх Вниз